Как я могу извлечь только алфавиты этого столбца, не учитывая символы после числа? Также бывают ситуации, когда нет номеров. В этом случае можно ли создать условие с помощью CASE и WHEN, чтобы применить условие извлечения только в случаях, когда есть числа?
Вход:
medication_title
GLYXAMBI 25 MG E 5 MG
GLIFAGE XR 750 MG
AD TIL
SIMETICON GOTAS
Вывод:
medication_title | medication_commercialname
GLYXAMBI 25 MG E 5 MG GLYXAMBI
GLIFAGE XR 750 MG GLIFAGE XR
AD TIL AD TIL
SIMETICON GOTAS SIMETICON GOTAS
Спасибо!
Использование: select substring('GLIFAGE XR 750 MG' from '[A-Z ]*');
или может использовать substring(medication_title from '[^\d/]*'), что не имеет значения, чувствительность к регистру.
@Isolated: Эти медики тоже до сих пор пользуются факсами, так что, наверное, тоже только заглавными буквами.... 😁


«Функция подстроки с двумя параметрами, подстрока (строка из шаблона), обеспечивает извлечение подстроки, которая соответствует шаблону регулярного выражения POSIX». (см.: документы)
Запрос:
SELECT rtrim(substring(medication_title from '[A-Z ]*')) FROM tablename:
должен возвращать символы перед любым числом.
Регулярное выражение «[A-Z]*» будет соответствовать всем (заглавным) буквам от «A» до «Z» и пробелу любое количество раз (из-за *).
Функция rtrim() удалит пробелы в конце.
Красиво, но остерегайтесь пробелов в конце. Может гнездо в TRIM().
SELECT trim(substring(medication_title from '[^\d]*')) FROM tablename;
Вывод :
GLYXAMBI
GLIFAGE XR
AD TIL
SIMETICON GOTAS
Как насчет REGEXP_REPLACE() поиска \s*\d.* (взяв любую строку из 0+ пробельных символов, цифру и еще 0+ символов):
WITH input(medication_title) AS (
VALUES ('GLYXAMBI 25 MG E 5 MG')
, ('GLIFAGE XR 750 MG')
, ('AD TIL')
, ('SIMETICON GOTAS')
)
SELECT REGEXP_REPLACE(medication_title, '\s*\d.*','', 'g') FROM input;
Вернул бы:
GLYXAMBI
GLIFAGE XR
AD TIL
SIMETICON GOTAS
Посмотреть онлайн скрипку
Во 2 ряду почему бы и нет
GLIFAGE XR