Maison > base de données > tutoriel mysql > Comment puis-je analyser les prénoms, prénoms et noms de famille à partir d'un champ de nom complet dans SQL ?

Comment puis-je analyser les prénoms, prénoms et noms de famille à partir d'un champ de nom complet dans SQL ?

Patricia Arquette
Libérer: 2024-12-26 19:58:14
original
606 Les gens l'ont consulté

How can I parse first, middle, and last names from a full name field in SQL?

Analyse des prénoms, prénoms et noms de famille à partir d'un champ de nom complet dans SQL

Extraire des composants de nom individuels à partir d'un seul champ de nom complet peut être une tâche courante dans le traitement des données. Explorons une solution SQL pratique pour y parvenir.

Solution :

1. Extraire le prénom :

SUBSTRING(FULL_NAME, 1, CHARINDEX(' ', FULL_NAME)-1)
Copier après la connexion

2. Extraire le deuxième prénom (facultatif) :

CASE WHEN 0 = CHARINDEX(' ', REST_OF_NAME)
     THEN NULL  -- No more spaces? Assume rest is the last name
     ELSE SUBSTRING(REST_OF_NAME, 1, CHARINDEX(' ', REST_OF_NAME)-1)
     END
Copier après la connexion

3. Extraire le nom de famille :

SUBSTRING(REST_OF_NAME, 1 + CHARINDEX(' ', REST_OF_NAME), LEN(REST_OF_NAME))
Copier après la connexion

4. Split pour les cas spéciaux :

  • Noms NULL
  • Espaces de début/fin
  • Plusieurs espaces consécutifs
  • Seul le prénom est présent
  • Conservation du nom complet d'origine
  • Préfixes et titres

Requête étendue avec gestion des cas spéciaux :

SELECT
  FIRST_NAME.ORIGINAL_INPUT_DATA,
  FIRST_NAME.TITLE,
  FIRST_NAME.FIRST_NAME,
  CASE WHEN 0 = CHARINDEX(' ', FIRST_NAME.REST_OF_NAME)
       THEN NULL  -- No more spaces? Assume rest is the last name
       ELSE SUBSTRING(FIRST_NAME.REST_OF_NAME, 1, CHARINDEX(' ', FIRST_NAME.REST_OF_NAME)-1)
       END AS MIDDLE_NAME,
  SUBSTRING(FIRST_NAME.REST_OF_NAME, 1 + CHARINDEX(' ', FIRST_NAME.REST_OF_NAME), LEN(FIRST_NAME.REST_OF_NAME)) AS LAST_NAME
FROM
  (
  SELECT
    TITLE.TITLE,
    CASE WHEN 0 = CHARINDEX(' ', TITLE.REST_OF_NAME)
         THEN TITLE.REST_OF_NAME  -- No space? Return the whole thing
         ELSE SUBSTRING(TITLE.REST_OF_NAME, 1, CHARINDEX(' ', TITLE.REST_OF_NAME)-1)
    END AS FIRST_NAME,
    CASE WHEN 0 = CHARINDEX(' ', TITLE.REST_OF_NAME)
         THEN NULL  -- No spaces @ all? Then 1st name is all we have
         ELSE SUBSTRING(TITLE.REST_OF_NAME, CHARINDEX(' ', TITLE.REST_OF_NAME)+1, LEN(TITLE.REST_OF_NAME))
    END AS REST_OF_NAME,
    TITLE.ORIGINAL_INPUT_DATA
  FROM
    (
    SELECT
      CASE WHEN SUBSTRING(TEST_DATA.FULL_NAME, 1, 3) IN ('MR ','MS ','DR ','MRS')
           THEN LTRIM(RTRIM(SUBSTRING(TEST_DATA.FULL_NAME, 1, 3)))
           ELSE NULL  -- Not in the title list? Return NULL
           END AS TITLE,
      CASE WHEN SUBSTRING(TEST_DATA.FULL_NAME, 1, 3) IN ('MR ','MS ','DR ','MRS')
           THEN LTRIM(RTRIM(SUBSTRING(TEST_DATA.FULL_NAME, 4, LEN(TEST_DATA.FULL_NAME))))
           ELSE LTRIM(RTRIM(TEST_DATA.FULL_NAME))
           END AS REST_OF_NAME,
      TEST_DATA.ORIGINAL_INPUT_DATA
    FROM
      (
      SELECT
        REPLACE(REPLACE(LTRIM(RTRIM(FULL_NAME)), '  ', ' '), '  ', ' ') AS FULL_NAME,
        FULL_NAME AS ORIGINAL_INPUT_DATA
      FROM
        YOUR_TABLE  -- Replace this with your actual table
      ) TEST_DATA
    ) TITLE
  ) FIRST_NAME
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal