0

フルネーム形式でデータが保存されている列があります。次に例を示します。

トム・スミス

アンドリュー・スミス

これを次のように変換するために使用できる関数 (または関数の組み合わせ) はありますか。

T・スミス

A・スミス

4

3 に答える 3

5

名と姓を別々に保存する必要があります。その間:

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

それらのどれがミドルネームで、どれが複数の単語の姓を持っているかをどのように判断しますか? この状況に対処している場合は、拳をより強く振ってください。

于 2012-08-30T03:31:55.230 に答える
1
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
于 2012-08-30T06:35:49.983 に答える
0

これはうまくいくはずです:

SELECT SUBSTRING(nameCol, 1, 1) + '.' + SUBSTRING(nameCol, CHARINDEX(' ', nameCol), 100)
于 2012-08-30T03:35:00.630 に答える