0

文字列には、スペースで区切られた多くの単語が含まれています。

employee_first_nm = "John Walker"

最初の部分 ("John") だけを取得したい。この部分は、次のコードを使用して行いました。

SUBSTR(employee_first_nm, 1, INSTR(employee_first_nm, ' '));

場合によっては、文字列に「sonia」などの単語が 1 つしかない場合があります。ここで問題が発生しました。ここで、単語が 1 つしかない場合、関数は値をまったく取得しません。しかし、この場合は完全な文字列、つまり「sonia」を取得したいと考えています。

助けてください

4

5 に答える 5

4

常にスペースがあることを確認してください。

... INSTR(employee_first_nm + ' ', ' ')

文字列にすでにスペースがある場合、最初のスペースが見つかるため、最後に別のスペースを詰めても違いはありません。既存のスペースがない場合は、スペースを追加するとロジックが機能します。

INSTR(..)-1(通常、末尾のスペースも削除する必要があります)

于 2012-07-09T14:10:58.580 に答える
1
SUBSTR(employee_first_nm, 1, INSTR(CONCAT(employee_first_nm,' '), ' ')); 
于 2012-07-09T14:19:22.283 に答える
0

ここで正規表現の力を利用してみませんか。

REGEXP_SUBSTR(employee_first_nm, '^[a-zA-Z]*\s?')

これにより、目的の部分文字列が返されます。

于 2012-07-09T14:26:59.617 に答える
0

または、INSTR が正しい値を返すことを確認できます。

(case when INSTR(employee_first_nm, ' ') > 0
      then SUBSTR(employee_first_nm, 1, INSTR(employee_first_nm, ' '))
      else employee_first_nm
 end)
于 2012-07-09T14:14:08.647 に答える
-1

あなたが試すことができます:

SUBSTRING(select employee_first_nm,0, charindex(' ',employee_first_nm)

テスト済み:

select substring('John walker',0, charindex(' ','John walker more'))

戻り値 -> 「ジョン」

于 2012-07-09T14:13:25.423 に答える