2017-11-21 33 views
1

私は以下のレコードを持っています。名前をLname、Fname、Mnameに分割したい。分割名をSQLの姓、名、ミドルネームに分割

Name 
John, David Handsome 

ここは私の質問です。 Lnameを取得できましたが、FnameとMnameは取得できませんでした。

SELECT 
NAME, 
LEFT(NAME,CHARINDEX(',',NAME)-1) AS LNAME 
FROM TABLE 

私の所望の出力は次のようになります。

Name     Lname Fname Mname 
John, David Handsome John Daivd Handsome 

すべてのヘルプははるかに高く評価されるだろう。ジョー

+3

あなたはどのDBMSを使用していますか –

+1

「IvánDe Luca Di Natale」やフランス語「Isaac De la Croix」や「Maurits-jan Kuipers op den Kollenstaart」のようなラテン語の名前はどうでしょうか?どのようにミドルネームを手に入れますか? – danieltakeshi

+0

非常に良い質問@ダニエル – joe

答えて

0

名の形式はつもりであれば は、以下を使用し、同じまま:

select name,LEFT(NAME,CHARINDEX(',',NAME)-1) AS LNAME, regexp_substr(name,'[^ ]+',1,2) as fname,regexp_substr(name,'[^ ]+',1,3) mname from table; 
0

あなたはこのようにそれを行うことができます。

SELECT 
LEFT(NAME,CHARINDEX(',',NAME)-1) AS LNAME, 
LEFT(REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''),CHARINDEX(' ',REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''))-1) AS FNAME, 
REPLACE(REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''),LEFT(REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''),CHARINDEX(' ',REPLACE(NAME,LEFT(NAME,CHARINDEX(',',NAME)+1),''))-1),'') AS MNAME 

ネストされた置換関数とcharindex関数のために混乱がほとんどありません。しかし、それらに密接に焦点を当てれば、ロジックは非常に簡単です。

+0

ようこそ。 – lucky