создать новый столбец с условными значениями из существующего столбца в MySql Workbench? - PullRequest
0 голосов
/ 25 марта 2019

В моей таблице MySql есть столбец с именем "details", например:

like this

Теперь я хочу добавить еще один столбец с именем «name», который будет содержать только первое слово каждой ячейки столбца «details», например:

enter image description here

пока я сделал это:

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

Теперь, как добавить это в столбец "имя"?

Ответы [ 3 ]

0 голосов
/ 25 марта 2019

использование position() функция

DEMO

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

ВЫВОД:

value
Wellcare

ТАКЖЕ locate() можно использовать

 select 
        substring(details, 1, LOCATE(' ', details)) 
    from 
        my_table
0 голосов
/ 25 марта 2019

Вы можете использовать SUBSTRING_INDEX, чтобы извлечь первое слово каждого значения. Например:

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

Выход:

Wellcare

Чтобы добавить это к вашей таблице, у вас есть несколько вариантов. Если вы работаете с MySQL 5.7.6 или новее, вы можете использовать сгенерированный столбец, как описано в этом вопросе и руководстве , например,

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

Последний вариант будет состоять в том, чтобы создать фактический столбец и затем обновить его с помощью триггера, но оба предыдущих варианта предпочтительнее.

0 голосов
/ 25 марта 2019

Пожалуйста, попробуйте это.

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