Py学习  »  DATABASE

从MySQLWorkbench中的现有列创建带有条件值的新列?

zero • 6 年前 • 1960 次点击  

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

like this

现在,我想添加另一个名为“name”的列,该列只包含“details”列中每个单元格的第一个字,如下所示:

enter image description here

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

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38946
文章 [ 3 ]  |  最新文章 6 年前
fa06
Reply   •   1 楼
fa06    6 年前

使用 position() 功能

DEMO

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

输出:

value
Wellcare

产科加强生命支持 locate() 可以使用

 select 
        substring(details, 1, LOCATE(' ', details)) 
    from 
        my_table
Hemang Aghera
Reply   •   2 楼
Hemang Aghera    6 年前

请试试这个。

select 
    substring(details, 1, instr(details, ' '))  As Name
from 
    my_table
Nick
Reply   •   3 楼
Nick    6 年前

你可以用 SUBSTRING_INDEX 提取每个值的第一个字。例如:

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

输出:

Wellcare

要将此添加到表中,您有几个选项。如果运行的是MySQL5.7.6或更高版本,则可以使用生成的列,如中所述。 this question 以及 manual 例如

ALTER TABLE mytable ADD COLUMN name VARCHAR(50) AS (SUBSTRING_INDEX(details, ' ', 1))

如果您想以牺牲获取时间来保存存储,请将列声明为 VIRTUAL ,否则声明为 STORED .

您还可以创建 VIEW 其中包括将此表达式作为列。这类似于 事实上的 生成的列,但也适用于不支持生成列的MySQL版本:

CREATE VIEW mytable_view AS
SELECT *, SUBSTRING_INDEX(details, ' ', 1) AS name
FROM mytable

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