使用 MySql workbench 中现有列的条件值创建新列?
create new column with conditional values from existing column in MySql workbench?
我的 MySql table 中有一列名为 "details",如下所示:
现在我想添加另一个名为 "name" 的列,它将仅包含列 "details" 中每个单元格的第一个单词,如下所示:
到目前为止我已经这样做了:
select
substring(details, 1, instr(details, ' '))
from
my_table
现在如何将其添加到列中 "name"?
请试试这个。
select
substring(details, 1, instr(details, ' ')) As Name
from
my_table
使用position()
函数
select
substring(details, 1, POSITION(' ' IN details))
from
my_table
输出:
value
Wellcare
还可以使用locate()
select
substring(details, 1, LOCATE(' ', details))
from
my_table
您可以使用SUBSTRING_INDEX
提取每个值的第一个单词。例如:
SELECT SUBSTRING_INDEX('Wellcare Value (HMO-POS)', ' ', 1) AS name
输出:
Wellcare
要将此添加到您的 table,您有几个选择。如果您是 运行 MySQL 5.7.6 或更高版本,则可以使用 this question and the manual 中所述的生成列,例如
ALTER TABLE mytable ADD COLUMN name VARCHAR(50) AS (SUBSTRING_INDEX(details, ' ', 1))
如果要以提取时间为代价节省存储空间,请将列声明为VIRTUAL
,否则将其声明为STORED
。
您还可以创建一个 VIEW
将此表达式作为列包含在内。这类似于 VIRTUAL
生成列,但也适用于不支持生成列的 MySQL 版本:
CREATE VIEW mytable_view AS
SELECT *, SUBSTRING_INDEX(details, ' ', 1) AS name
FROM mytable
最后一个选项是创建一个实际的列,然后通过触发器更新它,但是前面两个选项都是更可取的。
我的 MySql table 中有一列名为 "details",如下所示:
现在我想添加另一个名为 "name" 的列,它将仅包含列 "details" 中每个单元格的第一个单词,如下所示:
到目前为止我已经这样做了:
select
substring(details, 1, instr(details, ' '))
from
my_table
现在如何将其添加到列中 "name"?
请试试这个。
select
substring(details, 1, instr(details, ' ')) As Name
from
my_table
使用position()
函数
select
substring(details, 1, POSITION(' ' IN details))
from
my_table
输出:
value
Wellcare
还可以使用locate()
select
substring(details, 1, LOCATE(' ', details))
from
my_table
您可以使用SUBSTRING_INDEX
提取每个值的第一个单词。例如:
SELECT SUBSTRING_INDEX('Wellcare Value (HMO-POS)', ' ', 1) AS name
输出:
Wellcare
要将此添加到您的 table,您有几个选择。如果您是 运行 MySQL 5.7.6 或更高版本,则可以使用 this question and the manual 中所述的生成列,例如
ALTER TABLE mytable ADD COLUMN name VARCHAR(50) AS (SUBSTRING_INDEX(details, ' ', 1))
如果要以提取时间为代价节省存储空间,请将列声明为VIRTUAL
,否则将其声明为STORED
。
您还可以创建一个 VIEW
将此表达式作为列包含在内。这类似于 VIRTUAL
生成列,但也适用于不支持生成列的 MySQL 版本:
CREATE VIEW mytable_view AS
SELECT *, SUBSTRING_INDEX(details, ' ', 1) AS name
FROM mytable
最后一个选项是创建一个实际的列,然后通过触发器更新它,但是前面两个选项都是更可取的。