web-dev-qa-db-ja.com

SELECTステートメントで区切られた値の右側の文字を抽出します

Selectステートメントの一部として、ハイフンの右側にあるすべての文字を抽出する必要があります。選択には他の列があります。以下のクエリでは、右の3文字が2番目の列から選択されています。区切り文字の右側にある不特定の数の文字(私の場合はハイフン)を抽出するにはどうすればよいですか?適切な機能を使用できますか?別の機能を使用する必要がありますか?

Select column1, right(column2,3) as extracted, column3
From myTable

SQL Server2008を使用しています。

8
user2525015

この質問にはデータベース固有の回答があります。

SQL Serverを使用している場合:

_SELECT column1
     , RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) as extracted
     , column3 
FROM myTable
_

ハイフンが常に存在するとは限らない場合は、CASEステートメントを追加するか、NULLIF()を使用できます。

_SELECT column1
     , CASE WHEN column2 LIKE '%-%' THEN RIGHT(column2,CHARINDEX('-',REVERSE(column2))-1) 
           END as extracted
     , column3 
FROM myTable
_

または:

_SELECT column1
     , RIGHT(column2,NULLIF(CHARINDEX('-',REVERSE(column2)),0)-1) as extracted
     , column3 
FROM myTable
_

MySQLを使用している場合は、CHARINDEX()LOCATE()に変更するだけです。 OracleはINSTR()であり、最初の2つのパラメーターが入れ替わっていると思います。最初は検索対象の文字列、次に検索対象の文字列です。

20
Hart CO

どうですか:

SUBSTRING(column2, CHARINDEX('-',column2)+1, 8000)

(8000を列の定義に置き換えます。)

もちろん、列に常にハイフンが含まれているとは限らない場合は、次のように言うことができます。

SUBSTRING(column2, COALESCE(NULLIF(CHARINDEX('-',column2)+1,1),1),8000)

列にハイフンが含まれていない場合は、列全体が表示されます。結果からそれらを除外したい場合は、WHERE句を追加できます。

WHERE CHARINDEX('-', column2) > 0

または、GoatCOの回答のようなCASE式を使用することもできます。

1
Aaron Bertrand