使用 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()函数

DEMO

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

最后一个选项是创建一个实际的列,然后通过触发器更新它,但是前面两个选项都是更可取的。