【问题标题】:create new column with conditional values from existing column in MySql workbench?从 MySql 工作台中的现有列创建具有条件值的新列?
【发布时间】:2019-08-15 08:31:59
【问题描述】:

我的 MySql 表中有一个名为“详细信息”的列,如下所示:

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

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

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

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

【问题讨论】:

标签: mysql sql mysql-workbench mysql-python


【解决方案1】:

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

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

输出:

Wellcare

要将其添加到您的表中,您有几个选择。如果您运行的是 MySQL 5.7.6 或更高版本,则可以使用 this questionmanual 中描述的生成列,例如

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

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

【讨论】:

    【解决方案2】:

    使用position()函数

    DEMO

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

    输出:

    value
    Wellcare
    

    也可以使用locate()

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

    【讨论】:

      【解决方案3】:

      请试试这个。

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

      【讨论】:

        猜你喜欢
        • 2019-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-24
        • 2016-11-09
        • 2022-01-04
        • 2022-08-17
        相关资源
        最近更新 更多