2017-08-07 3 views
0

' 'SQL - スペースを使用して、私は3つの部分にフィールドを打破したい第一後の値と第二のスペース

select name from nametable; 

すべての情報は同じですフィールド。例えば、'dr john smith','mrs jane smith'

私は結果が3列に分割されてみたい:

select title, firstname, lastname from nametable 

例:タイトルとして

'DR'、姓としてファーストネームとして 'ジョン'、「スミス

姓として

'MRS' タイトルとしてFIRSTNAMEとして、 'ジェーン'、「スミスの

+0

Answer –

答えて

1

あなたは012を使用することができます機能、次のように:あなたは@nameにピリオドを持っている場合は

declare @name varchar(100) = 'Mr John Nash' 

select parsename(Replace(@name , ' ', '.'), 3) as title, 
     parsename(Replace(@name, ' ', '.'), 2) as firstName, 
     parsename(Replace(@name, ' ', '.'), 1) as lastName; 

、あなたがこれを使用することができます:

ここ
declare @name varchar(100) = 'Mr. John Nash' 


select Replace(parsename(Replace(Replace(@name, '.', '*') , ' ', '.'), 3), '*', '.') as title, 
     Replace(parsename(Replace(Replace(@name, '.', '*'), ' ', '.'), 2), '*', '.') as firstName, 
     Replace(parsename(Replace(Replace(@name, '.', '*'), ' ', '.'), 1), '*', '.') as lastName; 

は、まず、たとえば、あなたが見ることはない記号で.を置き換えますa *。最後に*.に置き換えます。

+0

これには欠陥があります。名前に3つ以上のスペースが含まれているか、ピリオド+ 3つのスペースが含まれていると、何も見つかりません。 '氏。ジョンナッシュ 'それがピリオドを含んでいれば間違った結果を返します –

+0

私はあなたが2つのスペースを意味すると思います。質問には、title、firstname、lastnameの3つの列しかないという。期間中、私が追加する簡単な解決策があります。 @ t-clausen.dk – TheEsnSiavashi

+0

いいえ、私は3つのスペースを意味します。そして、単純な解決策は、期間を別の値に置き換えて、復活祭の後に戻します。 –

関連する問題