Получить алфавиты только перед числом — PostgreSQL

Как я могу извлечь только алфавиты этого столбца, не учитывая символы после числа? Также бывают ситуации, когда нет номеров. В этом случае можно ли создать условие с помощью 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

Спасибо!

Во 2 ряду почему бы и нет GLIFAGE XR

Isolated 25.10.2022 19:57

Использование: select substring('GLIFAGE XR 750 MG' from '[A-Z ]*');

Luuk 25.10.2022 20:01

или может использовать substring(medication_title from '[^\d/]*'), что не имеет значения, чувствительность к регистру.

Isolated 25.10.2022 20:04

@Isolated: Эти медики тоже до сих пор пользуются факсами, так что, наверное, тоже только заглавными буквами.... 😁

Luuk 25.10.2022 20:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
4
55
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

«Функция подстроки с двумя параметрами, подстрока (строка из шаблона), обеспечивает извлечение подстроки, которая соответствует шаблону регулярного выражения POSIX». (см.: документы)

Запрос:

SELECT rtrim(substring(medication_title from '[A-Z ]*')) FROM tablename:

должен возвращать символы перед любым числом.

Регулярное выражение «[A-Z]*» будет соответствовать всем (заглавным) буквам от «A» до «Z» и пробелу любое количество раз (из-за *).

Функция rtrim() удалит пробелы в конце.

Красиво, но остерегайтесь пробелов в конце. Может гнездо в TRIM().

JvdV 25.10.2022 20:19
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

Посмотреть онлайн скрипку

Другие вопросы по теме