1
SQL Serverのコードは、最初の名前、中間のイニシャル、およびタイトルを別々の項目として抽出しますが、問題なく動作しますSQL Serverを使用して名前とタイトルを別々の列に区切ります
ワーキング:
DOE,JOHN A MD -
Last name: DOE
First name: JOHN
Middle initial:A
Title: MD
に動作していない:
DOE,JOHN MD -
Last name: DOE
First name: JOHN
Middle initial: M
Title: D
コード私が現在使用している:何のミドルネームのイニシャルはありません
ISNULL(CASE
WHEN 0 = CHARINDEX(' ', RIGHT(Name, LEN(Name), CHARINDEX(',', Name)))
THEN LTRIM(SUBSTRING(Name, CHARINDEX(',', Name) + 1, 99))
ELSE SUBSTRING(RIGHT(Name, LEN(Name) - CHARINDEX(',', Name)), 1, CHARINDEX(' ', RIGHT(Name, LEN(Name) - CHARINDEX(',', Name))) - 1)
END, '') AS FirstName,
ISNULL(CASE
WHEN 0 = CHARINDEX(' ', RIGHT(Name, LEN(Name) - CHARINDEX(',', Name)))
THEN NULL
ELSE SUBSTRING(RIGHT(Name, LEN(Name) - CHARINDEX(',', Name)), CHARINDEX(' ', RIGHT(Name, LEN(Name) - CHARINDEX(',', Name))) + 1, 1)
END,'') as MiddleInitial,
ISNULL(CASE
WHEN 0 = CHARINDEX(' ', SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1))
THEN SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)
ELSE SUBSTRING(SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1), 1, CHARINDEX(' ', SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)) - 1)
END,'') as LastName,
ISNULL(CASE
WHEN 0 = CHARINDEX(' ', RIGHT(Name, LEN(Name) - CHARINDEX(',', Name)))
THEN NULL
ELSE SUBSTRING(RIGHT(Name, LEN(Name) - CHARINDEX(',', Name)), CHARINDEX(' ', RIGHT(Name, LEN(Name) - CHARINDEX(',', Name))) + 2, 4)
END,'') as Spec,
ISNULL(ProviderID, ' ') as provid,
ISNULL(ServiceID,' ') as svcid,
ISNULL(SpecialtyAbsServiceID,' ') sabsid
ご協力いただければ幸いです。
ありがとうございます - マット
としてベティジェーンが、これは* SQLで達成されるように*しているのか?まともな正規表現の実装を持つ言語であれば、これを処理できます。 MS SQL Serverにその機能があるかどうかは不明です。 –
C#などの言語でこの種の処理を行う方がよいでしょう。 –