検索
ホームページデータベースmysql チュートリアルSQL の単一のフルネーム フィールドから名、ミドルネーム、姓を解析するにはどうすればよいですか?

How Can I Parse First, Middle, and Last Names from a Single Full Name Field in SQL?

SQL のフルネームフィールドからの名、ミドルネーム、姓の解析

概要

このディスカッションは、データ処理における共通の課題を中心にしています。それは、以下を使用して単一のフルネーム フィールドから名、ミドルネーム、姓を抽出することです。 SQL。この記事では、典型的なケースの 90% を処理することを目的とした実用的なソリューションについて説明します。

メソッド

提案されたメソッドには、フルネーム フィールドを分解するネストされた一連のサブクエリが含まれます。個々の部分に分割します。フルネームは「First Middle Last」の形式で、ミドルネームはオプションであることを前提としています。

次の SQL 例は、このアプローチを示しています。

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

特殊なケース

特殊な処理欠損値、末尾のスペース、3 つ以上の部分からなる名前などの場合は、結果の精度を高めることができます。

結論

このメソッドは、確実な結果を提供します。 SQL のフルネーム フィールドから名、ミドルネーム、姓を解析するための基盤であり、一般的なケースと特殊なケースの両方に対処します。ソリューションを特定の要件に適応させることで、名前の一致とデータ分析の効率を大幅に向上させることができます。

以上がSQL の単一のフルネーム フィールドから名、ミドルネーム、姓を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLのテーブル構造とデータをコピーする方法MySQLのテーブル構造とデータをコピーする方法Apr 29, 2025 pm 03:18 PM

MySQLのテーブル構造とデータをコピーする方法は次のとおりです。1。CreateTableを使用...テーブル構造をコピーするのが好きです。 2。IntersintINTOを使用してください...選択してデータをコピーします。これらの手順を通じて、さまざまなシナリオでデータのバックアップと移行を効率的に実行できます。

MySQLテーブルからランダムにデータを取得する方法MySQLテーブルからランダムにデータを取得する方法Apr 29, 2025 pm 03:15 PM

MySQLテーブルからデータをランダムに取得することは、RAND()関数を使用して実行できます。 1。基本的な使用法:SelectFromUsers OrderByRand()limit5; 2。高度な使用法:SelectFromUsersWhereId> =(selectfloor(rand()*(selectmax(id)fromusers)))limit5;最適化戦略には、インデックスとページネーションクエリの使用が含まれます。

MySQLテーブルのインデックス最適化戦略と方法MySQLテーブルのインデックス最適化戦略と方法Apr 29, 2025 pm 03:12 PM

MySQLテーブルのインデックス最適化戦略には次のものがあります。1。頻繁にクエリ列のインデックスを作成します。 2。共同インデックスを使用して、マルチコラムクエリの効率を改善します。 3.虐待や失敗を避けるために、インデックスを定期的に確認および最適化します。 4.適切なインデックスの種類と列を選択し、インデックスを監視および最適化し、効率的なクエリステートメントを書き込みます。これらの方法により、MySQLクエリのパフォーマンスを大幅に改善できます。

MySQLでデータを最適化し、操作を削除する方法MySQLでデータを最適化し、操作を削除する方法Apr 29, 2025 pm 03:09 PM

MySQLのデータの更新と削除操作の最適化は、次の手順を通じて達成できます。1。createIndexidx_last_order_dateoncustomers(last_order_date)などのインデックスを使用します。 2.バッチ操作を実行して、ロック時間を短縮します。 3.完全なテーブルスキャンを避け、適切なインデックスと条項を使用します。 4.トランザクションを使用して、パフォーマンスと原子性を向上させます。 5.スロークエリログを監視および最適化し、パフォーマンスボトルネックを識別します。

MySQLのデフォルトのポート番号を変更する方法MySQLのデフォルトのポート番号を変更する方法Apr 29, 2025 pm 03:06 PM

デフォルトのMySQLポート番号を変更する方法は次のとおりです。1。構成ファイルsudonano/etc/my.cnfを開きます。 2。[mysqld]セクションにport = 3307を追加または変更します。 3。編集者を保存して終了します。 4. MySQLサービスsudosystemctlrestartmysqlを再起動します。これにより、データベースのセキュリティを改善し、ポート競合の問題を解決できます。

MySQLの初期構成パラメーターを最適化する方法MySQLの初期構成パラメーターを最適化する方法Apr 29, 2025 pm 03:03 PM

MySQLの初期構成パラメーターを調整すると、データベースのパフォーマンスが大幅に向上する可能性があります。 1. innodb_buffer_pool_sizeを4GBに設定すると、INNODBテーブルのディスクI/Oを削減し、クエリのパフォーマンスを改善できます。 2.高い並行性環境では、innodb_thread_concurrencyを0に設定するとパフォーマンスが向上しますが、スレッドの数は慎重に管理する必要があります。

MySQLは、他のRDBMSと比較してどのように同時性を処理しますか?MySQLは、他のRDBMSと比較してどのように同時性を処理しますか?Apr 29, 2025 am 12:44 AM

mysqlhandlesconcurrencyusing amixofrow-levelandtable-levellocking、主にthroughnodb'srow-levellocking.comparedtootherrdbms、mysqlのsapproachiseformanyusecasesecasesbutmayfaceChallengeswithdeadlockdlacklikeRisikErisikErikErikErikErikErikErikErikErikErikErikErikErikErikErikeを使用してください

MySQLは、他のリレーショナルデータベースと比較してトランザクションをどのように処理しますか?MySQLは、他のリレーショナルデータベースと比較してトランザクションをどのように処理しますか?Apr 29, 2025 am 12:37 AM

mysqlhandlestransactionsefectivectivelivationtivelivational supportingingacidpropertiessimilArtopostgreslesclandoracle.1)mysqluseSesrepeatable-readededededededededededefaultisolation level

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール