ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Разбиение полного имени на части с помощью SQL: First, Middle, Last

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Ищете код для извлечения имени, отчества и фамилии из поля с полным именем в SQL? Вот готовое решение, применимое для случаев с одним отчеством:

SQL
Скопировать код
SELECT 
  TRIM(SUBSTRING(fullname, 1, CHARINDEX(' ', fullname))) AS first_name,
  TRIM(SUBSTRING(fullname, CHARINDEX(' ', fullname) + 1, CHARINDEX(' ', fullname, CHARINDEX(' ', fullname) + 1) – CHARINDEX(' ', fullname) – 1)) AS middle_name,
  TRIM(RIGHT(fullname, CHARINDEX(' ', REVERSE(fullname)) – 1)) AS last_name
FROM 
  users;

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

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Решение для случаев с четырьмя и более элементами имени, как у Гидры

Ситуация усложняется, когда в имени присутствует суффикс или несколько отчеств. Прибегните к подзапросу для решения этой задачи:

SQL
Скопировать код
SELECT 
  first_name,
  middle_name,
  REPLACE(TRIM(SUBSTRING(last_and_suffix, 1, IIF(CHARINDEX(' ', last_and_suffix) = 0, LEN(last_and_suffix), CHARINDEX(' ', last_and_suffix)))), ',', '') AS last_name,
  TRIM(SUBSTRING(last_and_suffix, CHARINDEX(' ', last_and_suffix) + 1, LEN(last_and_suffix))) AS suffix
FROM 
(
  SELECT 
    TRIM(SUBSTRING(fullname, 1, CHARINDEX(' ', fullname))) AS first_name,
    TRIM(SUBSTRING(fullname, CHARINDEX(' ', fullname) + 1, LEN(fullname) – CHARINDEX(' ', REVERSE(fullname)) – CHARINDEX(' ', fullname))) AS middle_name,
    TRIM(RIGHT(fullname, CHARINDEX(' ', REVERSE(fullname)))) AS last_and_suffix
  FROM 
    users
) AS names_with_suffix;

В подзапросе фамилия и суффикс обозначаются как один компонент, а затем основной запрос разделяет их.

Обработка имен с титулами 'Д-р', 'Сэр', 'III' и все их собратья

Как быть с именами, включающими титулы или суффиксы? В SQL следует использовать оператор CASE:

SQL
Скопировать код
SELECT
  CASE 
    WHEN CHARINDEX('Д-р ', fullname) = 1 THEN 'Д-р'
    ELSE 'Без титула'
  END AS title,
  ...
FROM 
  users;

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

Атака на скорость: быстрый способ разбора имён

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

Визуализация

Полное имя наглядно представить как матрешку. Возьмем за пример:

Полное имя: Джон Майкл Доу

'Раскладываем' её:

🪆1(имя): 'Джон' 🪆2(отчество): 'Майкл' 🪆3(фамилия): 'Доу'

В SQL мы также последовательно 'распаковываем' каждый элемент.

Важно: не все имена подчинены одной схеме

Помните, что схема 'Имя-Отчество-Фамилия' не всегда применима, иногда требуются корректировки в зависимости от набора данных и локализации.

Тестирование и валидация

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

Комментарии: незаметные помощники

Осмысленно комментируйте свой код, используйте логическое форматирование и понятные псевдонимы для упрощения восприятия и использования вашего скрипта.

Двусмысленность использования регулярных выражений

Весьма заманчиво может быть использование регулярных выражений для разбора имен в SQL, однако в некоторых СУБД это может быть неоптимальным решением. Предпочтительнее использовать стандартные функции обработки строк.

Полезные материалы

  1. Регулярные выражения в TSQL на Workbench – для освоения работы с регулярными выражениями в SQL Server.
  2. Разница между char, nchar, varchar и nvarchar в SQL Server – сравнительный обзор типов данных для хранения имен.
  3. MySQL :: Руководство по MySQL 8.0 :: Функции и операторы для строк — подробная справка о функциях обработки строк в MySQL.
  4. LTRIM – Документация Oracle — примеры использования функций SUBSTR и INSTR для работы со строками в Oracle.