14

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

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

SQL Server 2008 を使用しています。

4

2 に答える 2

32

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

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 つのパラメータが入れ替わっています。最初は検索対象の文字列で、次に検索対象の文字列です。

于 2013-09-25T13:48:44.647 に答える
1

どうですか:

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

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

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

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

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

WHERE CHARINDEX('-', column2) > 0

CASEまたは、 Goat CO の回答のような表現を使用することもできます。

于 2013-09-25T14:09:00.483 に答える