私はクエリで別々の部分に分割する必要があるフィールド[名前]を持っています。フィールドは、次の形式になりますSQL Serverの名前フィールドを分割するクエリ
LastName,FirstName PossibleMiddle
サンプル値:出力のための
Doe,John Andrew
Smith,Jane
目標:
[LastName] [FirstName] [MiddleName]
---------------- ---------------- ----------------
Doe John Andrew
Smith Jane
ここでは、私が今までうまくすることができましたコードです。
SELECT
LEFT([Name], CHARINDEX(',', [Name]) - 1) AS [Last Name],
SUBSTRING([Name], CHARINDEX(',', [Name]) +1, LEN([Name])) AS [First and Middle Name],
SUBSTRING([Name], CHARINDEX(',', [Name]) +1, (CHARINDEX(' ', [Name])-1)) AS [First Name]
FROM t1
このコードは、理由の説明:
1. 2番目のSUBSTRINGが正しく作成されていないため、失敗します。それは常にスペースがあると仮定しますが、中間の名前があれば実際にはスペースしかありません。
2.私は[ファーストとミドルネーム]を1つにしたくありません(しかし、最初の問題が解決されれば残りは落ちます)。
私はこれで明白な何かを見逃しているように感じますが、まだ試して、解決していない長い朝です。見て反応する時間を取ってくれてありがとうございました。
SQL Serverののバージョンは?新しいものには、ここで使用する可能性のある新しい機能がいくつかあります(たとえば、2016年のSTRING_SPLIT)。そして、あなたはおそらくここで "すべてをキャッチ"することはありません。人の姓が2つの単語の場合はどうなりますか?ファーストネーム?両方が2つの単語の場合はどうなりますか? 1つにはアポストロフィがあればどうなるでしょうか?またはジュニアですか? –
@Jacob H:SQL Serverのバージョンは2008R2です。私はあなたの懸念を感謝し理解する。残念ながら、このクエリは、名前が不適切に設計された方法で格納されているという事実を修正することはありません。最終的には最終的な名前/最初の名前/中間の名前を抽出するだけで、異常があるかどうかを確認して対処することができます。 – RiSt
ただ、SqlZimの答えが2単語の姓の問題を処理していることを指摘したいと思います(データのようなケースが見つかりました)。姓のすべての部分がスペースで区切られている限り、その解決策は機能します。 – RiSt