Selectステートメントの一部として、ハイフンの右側にあるすべての文字を抽出する必要があります。選択には他の列があります。以下のクエリでは、右の3文字が2番目の列から選択されています。区切り文字の右側にある不特定の数の文字(私の場合はハイフン)を抽出するにはどうすればよいですか?適切な機能を使用できますか?別の機能を使用する必要がありますか?
Select column1, right(column2,3) as extracted, column3
From myTable
SQL Server2008を使用しています。
この質問にはデータベース固有の回答があります。
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つのパラメーターが入れ替わっていると思います。最初は検索対象の文字列、次に検索対象の文字列です。
どうですか:
SUBSTRING(column2, CHARINDEX('-',column2)+1, 8000)
(8000を列の定義に置き換えます。)
もちろん、列に常にハイフンが含まれているとは限らない場合は、次のように言うことができます。
SUBSTRING(column2, COALESCE(NULLIF(CHARINDEX('-',column2)+1,1),1),8000)
列にハイフンが含まれていない場合は、列全体が表示されます。結果からそれらを除外したい場合は、WHERE
句を追加できます。
WHERE CHARINDEX('-', column2) > 0
または、GoatCOの回答のようなCASE
式を使用することもできます。