Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

SQL. Разделение столбца (Фамилия, Имя) на два столбца + верхний регистр у имени и фамилии.

Solovey Ученик (208), открыт 1 неделю назад
Прошу помочь в вопросе. Делаю в Postdres.
Напишите запрос SQL , который разделит строку с именем и фамилией пользователя вида «Smith, John» на два отдельных столбца и приведет к верхнему регистру первую букву имени и фамилии, оставив остальное в нижнем регистре.
1) Вариант получился такой:
SELECT *,
split_part("Firs_name", ', ', 1) AS Imya,
split_part("Firs_name", ', ', 2) AS Otchestvo
FROM public."Тексты"
Но тут, не знаю что прописывать для верхнего регистра...да и потом скорее всего нужны регулярные выражения)
2) Вариант такой:
SELECT*,
substring("Firs_name", '^\S+' ) f,
substring("Firs_name", '\S+$' ) s
FROM public."Тексты"
Тут с первым словом вылезает запятая, как её убрать?
И что написать для верхнего регистра?
Заранее благодарен)
2 ответа
Андрей Высший разум (438822) 1 неделю назад
 initcap(trim(split_part(First_name, ',', 1))) AS Imya,
initcap(trim(split_part(First_name, ',', 2))) AS Otchestvo
Для преобразования первой буквы к верхнему регистру, а остальных к нижнему в PostgreSQL есть функция initcap. А для того, чтобы убрать возможные пробелы на концах, есть trim.
SoloveyУченик (208) 1 неделю назад
Да, бахнуло по плану, спасибо.
Значит второй вариант можно не рассматривать ?
Андрей Высший разум (438822) Solovey, Смысла нет. Регулярки нужны, когда требуется что-то более сложное, чем разрезание строки по заданному символу.
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (251199) 1 неделю назад
Если это именно «Smith, John» или «Боширов, Руслан»
то порядок такой:

 SELECT 
INITCAP(LOWER(TRIM(SPLIT_PART("Firs_name", ', ', 2)))) AS first_name,
INITCAP(LOWER(TRIM(SPLIT_PART("Firs_name", ', ', 1)))) AS last_name
FROM public."Тексты";
Похожие вопросы