#mysql #sql #substring #calculated-columns #alphanumeric
Вопрос:
У меня есть столбец (существующий Col), содержащий буквенно-цифровые значения, из которых я должен извлекать только обычный текст, как показано в примере ниже:
Существующий Col | Требуется Col |
---|---|
G14 — Шоколадные деньги 543 | Шоколадные деньги |
Количество парковочных мест Q89 | Количество парковочных мест |
19 — Плата за фишки — 20 | Плата за чипсы |
698 Стоимость билета | Стоимость билета |
Я попробовал функцию ПОДСТРОКИ, но не смог изменить ее, чтобы она принимала только обычный текст и игнорировала все остальное.
SUBSTRING ( Existing Col,5 ,10 )
Комментарии:
1. Вероятно, regexp_replace что-то
Ответ №1:
Предполагая, что у вас всегда есть по крайней мере два слова, вы можете использовать:
select regexp_substr(val, '([A-Za-z] [A-Za-z ] [A-Za-z] )( |$)')
from (select 'G14 - Chocolate money 543' as val union all
select 'Parking amount Q89' union all
select '19 - Chips fee - 20' union all
select '698 Ticket fee'
) x
Вот скрипка db<>.
Комментарии:
1. Спасибо за ответ, он отлично работает, как показано в db<>fiddle, но как я могу передать имя столбца вместо передачи отдельных значений?
2. @PreethamCS . . . Вы просто передаете имя столбца, как в примере (где столбец называется
val
).3. Извините, мне было неясно, когда я сказал название столбца, я ищу способ просто передать столбец «Существующий Col» в запрос вместо отдельных операторов select для значений, так как в столбце более 100 записей.
4. @PreethamCS. . .
regexp_substr(existing_col, '([A-Za-z] [A-Za-z ] [A-Za-z] )( |$)')
.