2016-08-25 8 views
1

私のテーブルfield1とfield2に2つの列があります。WHERE句でCASEを使用する方法

ここで私はfield2がNULLかどうかをチェックしたいと思います。

NULLはその後、私のところこの

どこフィールド1 =「myvalue」の

ようになり、それがNULLでないならば、私は、間に+とフィールド1とフィールド2の値を連結します。この

フィールド1フィールド2 + =「myvalue」

と同じように私はこのような何かを試してみましたが、私は仕事をdidntの。

WHERE CASE field2 IS NOT NULL 
THEN field1+field2 
ELSE field1 
END = 'myvalue' 

例えば、field2には値7252があり、field1には7311があります。このようにしなければなりません。

WHERE 7311+7252 = 'myvalue'とFIELD2が空

WHERE 7311 = 'myvalue'. 

ある場合は、誰かが私を助けることができますか? :)

答えて

1

次の2つの条件にこの例を翻訳し、ORを使用することができます。

SELECT * FROM YourTable t 
WHERE (t.field2 IS NULL AND t.field1 = 'myvalue') 
    OR (t.field2 IS NOT NULL AND field1 + field2 = 'myvalue') 

それとも、CASE EXPRESSIONでそれを行うことができます。

SELECT * FROM YourTable t 
WHERE 'myvalue' = CASE WHEN t.field2 IS NULL THEN t.field1 
         ELSE field1+field2 
        END 
+0

あなたは私がわからないvarchar'最初 – NickyvV

+0

'にそれらをキャストすることができます、彼らはvarchar型はすでにだ、と彼らは(多分myvalueは数を表す)すべきであるとして、彼らは数字かもしれないかもしれません。 @ニッキーVV。私はOPがそれを正しく処理すると信じています。 – sagi

+0

ああ、私は実際にはOPが数字を追加したいと思っていないと思っていませんでした。 – NickyvV

0

してみてください:フィールド1 + ISNULL(フィールド2、 '')= 'myvalue'

0

CASEステートメントを使用しない場合は、次のようなことを試すことができます。

WHERE 
    (NOT field2 IS NULL AND field1 + field2 = 'myvalue') 
    OR (field2 IS NULL AND field1 = 'myvalue') 
+1

論理が正しいのに、これは 'T-SQL'構文ではありません:) –

+1

あなたはまったく正しいですC#mode;)私の答えを訂正しました。ありがとうございました。 –

1

あなたは、以下のようCOALESCEを使用することができます。

SELECT 
    * 
FROM 
    Tbl 
WHERE 
    COALESCE(field1 + field2, field1) = 'Your Value' 

例えば。

SELECT COALESCE(field1 + field2, field1) 
-- 
SELECT COALESCE(7311 + 7252 , 7311) -- 14563 
SELECT COALESCE(7311 + NULL , 7311) -- 7311 
-- 
SELECT COALESCE('Test' + ' 1' , 'Test') -- Test 1 
SELECT COALESCE('Test' + NULL , 'Test') -- Test 
0

あなたのt.field1とt.field2は数値データ型であると仮定します。

SELECT * 
FROM YourTable t 
WHERE t.field1 + ISNULL(field2, 0) = 'myvalue' 
関連する問題