2013-09-25 4 views
5

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

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

私はこの質問には、データベース固有の答えを持っているSQL Serverのに2008

+0

私たちはどのSQLのバージョンを検討していますか? – Paul

答えて

13

を使用しています。

SQL Serverの使用している場合:ハイフンが常に存在しない場合にはあなたがCASEステートメントを追加したり、NULLIF()を使用することができます

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

を:

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()からに変更してください。私はオラクルがINSTR()だと信じており、最初の2つのパラメータは最初に検索している文字列、次に検索している文字列です。

+0

私はSQL Serverを使用しています。私はそれを含むように主題を編集しました。早速のご返事ありがとうございます。 – user2525015

+0

上記に「無効な長さのパラメータ」というメッセージが表示されます。 -1は長さとして解釈されます。私が正の数を代入すると、クエリが機能します。上記を不特定の長さで働かせることはできますか? – user2525015

+0

ハイフンがないときに2番目のクエリが作成されます。 –

1

方法について:

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

(カラムの定義と8000の交換)

もちろん列は常にハイフンが含まれていない可能性があります場合は、あなたが言うことができます。

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

列にハイフンが含まれていない場合は、列全体が表示されます。

WHERE CHARINDEX('-', column2) > 0 

それとも、ヤギCOの答えのようなCASE表現を使用することができます:あなたは結果から、これらを除外したい場合は、WHERE句を追加することができます。

+0

ありがとうございます。列の定義はどういう意味ですか?あなたはそのタイプを意味しますか? – user2525015

+0

@ user2525015長さを意味します。 VARCHAR(255)、VARCHAR(8000)など –

+0

これにより、「varcharは組み込み関数名ではありません」というエラーが発生します。私はSQL Server 2008を使用しています。最初はそれを無視しました。私はそれがエラーと何か関係があるかどうかわかりません。 – user2525015

関連する問題