2010-12-10 14 views
1

私はフルネームと呼ばれるデータベース内の列を持っていると私は、姓と名としてその名前を分割します:T-SQLクエリ問題

ここでは例です:

フルネーム サムピーター

Iこれは

FirstName LastName 
-------------------- 
Sam   Peter 

になりたいが、問題は、データベース内の列の中には、この

のような完全な名前を持っています
FullName 
-------- 
Sam George Jack Peter 
Sam Adam Peter 

私はこれは私がこれのためにT-SQLクエリを書くにはどうすればよい

FirstName   LastName 
---------   -------- 
Sam George Jack  Peter 
Sam Adam   Peter 

になりたいです。

答えて

2

としてフルネームを入れてをthis answerで説明した非常に徹底した名前の構文解析ルーチンがあります。それは "Mr. Martin J Van Buren III"のようなよりトリッキーなケースとともに、あなたの状況を処理します。

0

文字列操作のSQL Serverのすべての助けを事前に

おかげで悪名高い弱いです。

あなたの最善の策は、アプリケーションレイヤーで行うことです。

名前が3つ以上の例では、追加の名前がどのフィールドに入るのかはどのように分かりますか?彼らは常に姓が1つしかないことを保証していますか?それはあなたがして

UPDATE Table 
SET LastName = REVERSE(SUBSTRING(REVERSE([FullName]),1,FINDSTRING(REVERSE([FullName])," ",1))) 

私は運動を残すことができます動作するかどう

+0

私の場合、姓が1つしかないことがわかっています。 – Sam

0

がネット上でこれを見つけた

REVERSE(SUBSTRING(REVERSE([FullName]),1,FINDSTRING(REVERSE([FullName])," ",1))) 

あなたは

SELECT REVERSE(SUBSTRING(REVERSE([FullName]),1,FINDSTRING(REVERSE([FullName])," ",1))) 
FROM Table 

でそれをテストすることができます(それをテストしていません)あなたの名のために。

+0

Not Working。しかし、あなたの助けをありがとう – Sam

0

最後のスペースで分割していますか?ので、これは動作するはず場合:

select 'Sam George Jack Peter' as FullName 
into #names 
union select 'Sam Adam Peter' 

select LEFT(FullName,LEN(FullName)-CHARINDEX(' ',REVERSE(FullName))) as FirstName 
    ,RIGHT(FullName,CHARINDEX(' ',REVERSE(FullName))-1) as LastName 
from #names 

EDIT: スペースなしで名を処理およびLastName

select 'Sam George Jack Peter' as FullName 
into #names 
union select 'Sam Adam Peter' 
union select 'Peter' 

select CASE 
      WHEN CHARINDEX(' ',FullName) = 0 THEN '' 
      ELSE LEFT(FullName,LEN(FullName)-CHARINDEX(' ',REVERSE(FullName))) 
     END as FirstName 
     ,CASE 
      WHEN CHARINDEX(' ',FullName) = 0 THEN FullName 
      ELSE LTRIM(RIGHT(FullName,CHARINDEX(' ',REVERSE(FullName)))) 
     END as LastName 
from #names 
+0

しかし、私はこのように多くの列を持っているので、私は各レコードの選択を書く必要がありますか? – Sam

+0

それは私に次のエラーを与えています:メッセージ536、レベル16、状態2、行1 無効な長さのパラメータがRIGHT関数に渡されました。 – Sam

+1

@Sam、一度構文がわかれば、ユーザ定義関数とユーザを書くことができます。http://www.databasejournal.com/features/mssql/article.php/3348181/User-Defined-Functions-in-Microsoft-SQL -Server-2000.htm – Unreason