我的MySql表中有一列名为“ details”,如下所示:
现在,我想添加另一个名为“名称”的列,该列将仅包含“详细信息”列的每个单元格的第一个单词,如下所示:
到目前为止,我已经做到了:
select
substring(details, 1, instr(details, ' '))
from
my_table
现在如何将其添加到“名称”列中?
答案 0 :(得分:0)
请尝试这个。
select
substring(details, 1, instr(details, ' ')) As Name
from
my_table
答案 1 :(得分:0)
使用position()
函数
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 question和manual例如{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
最后一个选择是创建一个实际的列,然后通过触发器对其进行更新,但是前面两个选项都是可取的。