2017-09-15 10 views
1

"Doe、John"の形式の名前のテーブルがあり、 "Doe、J"に解析する必要があります。私はすでに姓を抽出するためにクエリーを作成しましたが、カンマと最初のイニシャルを含むように変更する方法がわかりません。"姓、FI"の形式を解析する名前Oracle

SUBSTR(Table.Name,1,INSTR(Table.Name,',',1,1)) 

答えて

2

NVLSUBSTRINSTRの組み合わせを使用してください。

SELECT NVL(SUBSTR("namefield", 0, INSTR("namefield", ',')+2), "namefield") AS Name 
FROM yourtable 

入力

Doe, John 
Smith, Mark 

出力

NAME 
Doe, J 
Smith, M 

SQLフィドル:http://sqlfiddle.com/#!4/e1f467/7/0

+0

識別子の前後に二重引用符を使用する必要はありません。大文字と小文字を区別するため、誤った大文字小文字を使用すると問題が発生する可能性があります。 – MT0

+0

@ MT0フィールド名は実際には 'namefield'という名前ではありません。名前が変わっても名前は変わりませんが、ロジックは同じですが、二重引用符は使用できません:) – Matt

+0

@Matt That works! NVL()は必要ですか? –

1

何これについて -

SELECT SUBSTR(Table.Name,1,INSTR(Table.Name,',',1)+2) 
0

限り、一つだけのスペースがあなたの例のデータごとに列にありますようREGEXP_REPLACEバージョン、:

select regexp_replace('Doe, John', '(.* .).*', '\1') 

\ 1は、文字列のすべてである括弧内の文字列の一致する部分を指し、残りの部分を無視して、最後のスペースとその後ろの文字までを含む。

関連する問題