0

T-SQLでは1 = 1がFalseを返します - なぜですか?

DEClaRE @p__linq__0 datetime 
SET @p__linq__0 = '2012-02-01 00:00:00' 
SELECT (STR(CAST(DATEPART (day, @p__linq__0) AS float))) 
SELECT 
InvoicingActivityStartDay, 
(STR(CAST(DATEPART (day, @p__linq__0) AS float))), 
      CASE WHEN STR(CAST(DATEPART (day, @p__linq__0) AS float))= InvoicingActivityStartDay THEN 'EQUAL' ELSE 'NOT EQUAL' END 
FROM INVOICEMETADATA 

これは私が自分のアプリケーションに持っていたLINQのツーエンティティクエリのラフなSQL変換した以下のスニペットをご覧ください。 InvoicingActivityStartDayための2つの可能な値は、このような行の1と20

このスニペットの結果である:それは第二行の等しくない返す理由

InvoicingActivityStartDay Column1 Column2 
1       1  NOT EQUAL 
20      1  NOT EQUAL 

私は理解し、しかし、なぜ1 = 1の最初の行では等しくないのでしょうか?

+0

「InvoicingActivityStartDay」のタイプは何ですか? –

+0

@FrédéricHamidiNVARCHAR(2);数字だけを保持します。 – FMFF

+0

その文字列が実際に '' 1 ''ではなく' '1''であることをチェックしましたか? (末尾のスペースに注意してください) –

答えて

0

InvoicingActivityStartDayは文字列ですか? SELECT STR(CAST(DATEPART (day, getdate()) AS float))は文字列を返します。あなたは整数の比較を期待していますか?

+0

正しいです、それは文字列です。 – FMFF

+4

@Stuこれは答えではなくコメントとして投稿する必要があります。 – Taryn

+3

@bluefeet - コメントするには50人の担当者が必要です。 –

関連する問題