从MySql工作台中的现有列创建具有条件值的新列?

时间:2019-03-25 06:06:44

标签: mysql sql mysql-workbench mysql-python

我的MySql表中有一列名为“ details”,如下所示:

like this

现在,我想添加另一个名为“名称”的列,该列将仅包含“详细信息”列的每个单元格的第一个单词,如下所示:

enter image description here

到目前为止,我已经做到了:

select 
    substring(details, 1, instr(details, ' ')) 
from 
    my_table

现在如何将其添加到“名称”列中?

3 个答案:

答案 0 :(得分:0)

请尝试这个。

select 
    substring(details, 1, instr(details, ' '))  As Name
from 
    my_table

答案 1 :(得分:0)

使用position()函数

DEMO

select 
    substring(details, 1, POSITION(' ' IN details)) 
from 
    my_table

输出:

value
Wellcare

也可以使用locate()

 select 
        substring(details, 1, LOCATE(' ', details)) 
    from 
        my_table

答案 2 :(得分:0)

您可以使用SUBSTRING_INDEX提取每个值的第一个单词。例如:

SELECT SUBSTRING_INDEX('Wellcare Value (HMO-POS)', ' ', 1) AS name

输出:

Wellcare

要将其添加到表中,您有两个选择。如果您运行的是MySQL 5.7.6或更高版本,则可以使用this questionmanual例如{p>

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

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