フルネーム形式でデータが保存されている列があります。次に例を示します。
トム・スミス
アンドリュー・スミス
これを次のように変換するために使用できる関数 (または関数の組み合わせ) はありますか。
T・スミス
A・スミス
フルネーム形式でデータが保存されている列があります。次に例を示します。
トム・スミス
アンドリュー・スミス
これを次のように変換するために使用できる関数 (または関数の組み合わせ) はありますか。
T・スミス
A・スミス
名と姓を別々に保存する必要があります。その間:
SELECT CASE WHEN FullName LIKE '% %' THEN
LEFT(FullName, 1) + '.' + SUBSTRING(FullName, CHARINDEX(' ', FullName), 255)
ELSE FullName END
FROM dbo.table;
別の方法:
SELECT COALESCE(LEFT(FullName, 1)
+ '.' + SUBSTRING(FullName, NULLIF(CHARINDEX(' ', FullName), 0), 255),
FullName)
FROM dbo.table;
Prince
どちらもor -のような 1 語の名前をMadonna
扱いますが、ミドル ネームがある場合は適切に処理しません。その場合の問題は次のようになります。
John Wayne Bobbitt
Billy Ray Cyrus
Lisa Van der Wal
Lee Harvey Oswald
Dennis Moseley Williams
James de Caan
それらのどれがミドルネームで、どれが複数の単語の姓を持っているかをどのように判断しますか? この状況に対処している場合は、拳をより強く振ってください。
Declare @t table(FullName Varchar(100))
Insert Into @t Values('Tom Smith'),('Andrew Smith'),(' Andrew '),('John Wayne Bobbitt'),(NULL)
- 解決
SELECT
NewName = CASE WHEN CHARINDEX(' ', LTRIM(RTRIM(FullName))) > 0 THEN LEFT(LTRIM(RTRIM(FullName)),1)
+ '.'
+SUBSTRING((LTRIM(RTRIM(FullName))),CHARINDEX(' ', LTRIM(RTRIM(FullName))),LEN(FullName))
ELSE LTRIM(RTRIM(FullName))
END
FROM @t
//結果
新しい名前
T. Smith
A. Smith
Andrew
J. Wayne Bobbitt
NULL
これはうまくいくはずです:
SELECT SUBSTRING(nameCol, 1, 1) + '.' + SUBSTRING(nameCol, CHARINDEX(' ', nameCol), 100)