Heim >Datenbank >MySQL-Tutorial >Wie kann ich Vor-, Zweit- und Nachnamen aus einem einzigen Feld für den vollständigen Namen in SQL analysieren?
Vor-, Mittel- und Nachnamen aus einem Feld mit vollständigem Namen in SQL analysieren
Einführung
Diese Diskussion dreht sich um eine häufige Herausforderung in der Datenverarbeitung: das Extrahieren von Vor-, Mittel- und Nachnamen aus einem einzigen Vollnamenfeld mithilfe von SQL. In diesem Artikel werden praktische Lösungen untersucht, die darauf abzielen, 90 % der typischen Fälle zu bewältigen.
Methode
Die vorgeschlagene Methode umfasst eine verschachtelte Reihe von Unterabfragen, die das Feld „Vollständiger Name“ aufschlüsseln in seine Einzelteile zerlegen. Es wird davon ausgegangen, dass der vollständige Name als „Vorname, mittlerer Nachname“ formatiert ist, wobei der zweite Vorname optional ist.
Beispiele
Das folgende SQL-Beispiel veranschaulicht den Ansatz:
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 --if the first three characters are in this list, --then pull it as a "title". otherwise return NULL for title. 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 END AS TITLE --if you change the list, don't forget to change it here, too. --so much for the DRY prinicple... ,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 --trim leading & trailing spaces before trying to process --disallow extra spaces *within* the name REPLACE(REPLACE(LTRIM(RTRIM(FULL_NAME)),' ',' '),' ',' ') AS FULL_NAME ,FULL_NAME AS ORIGINAL_INPUT_DATA FROM ( --if you use this, then replace the following --block with your actual table SELECT 'GEORGE W BUSH' AS FULL_NAME UNION SELECT 'SUSAN B ANTHONY' AS FULL_NAME UNION SELECT 'ALEXANDER HAMILTON' AS FULL_NAME UNION SELECT 'OSAMA BIN LADEN JR' AS FULL_NAME UNION SELECT 'MARTIN J VAN BUREN SENIOR III' AS FULL_NAME UNION SELECT 'TOMMY' AS FULL_NAME UNION SELECT 'BILLY' AS FULL_NAME UNION SELECT NULL AS FULL_NAME UNION SELECT ' ' AS FULL_NAME UNION SELECT ' JOHN JACOB SMITH' AS FULL_NAME UNION SELECT ' DR SANJAY GUPTA' AS FULL_NAME UNION SELECT 'DR JOHN S HOPKINS' AS FULL_NAME UNION SELECT ' MRS SUSAN ADAMS' AS FULL_NAME UNION SELECT ' MS AUGUSTA ADA KING ' AS FULL_NAME ) RAW_DATA ) TEST_DATA ) TITLE ) FIRST_NAME
Sonderfälle
Umgang mit Sonderfällen wie fehlenden Werten, Nachgestellte Leerzeichen und Namen mit mehr als drei Teilen können die Genauigkeit der Ergebnisse verbessern.
Fazit
Diese Methode bietet eine solide Grundlage für die Analyse von First, Middle, und Nachnamen aus einem Feld mit vollständigem Namen in SQL, wobei sowohl typische als auch Sonderfälle behandelt werden. Durch die Anpassung der Lösung an spezifische Anforderungen können Sie eine deutliche Verbesserung der Namenszuordnung und Datenanalyseeffizienz erreichen.
Das obige ist der detaillierte Inhalt vonWie kann ich Vor-, Zweit- und Nachnamen aus einem einzigen Feld für den vollständigen Namen in SQL analysieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!