0

请看下面的代码片段1 = 1在T-SQL中返回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两个可能的值是1和20

这段代码的结果行是这样的:

InvoicingActivityStartDay Column1 Column2 
1       1  NOT EQUAL 
20      1  NOT EQUAL 

我明白为什么它返回不等于第二行;但为什么它在1 = 1的第一行返回NOT EQUAL?

+0

“InvoicingActivityStartDay”的类型是什么? – 2012-03-20 18:39:52

+0

@FrédéricHamidiNVARCHAR(2);但只保留数字。 – FMFF 2012-03-20 18:54:46

+0

您是否检查过该字符串实际上是“1”而不是“1”? (注意尾部空格) – 2012-03-20 18:56:47

回答

0

InvoicingActivityStartDay一个字符串? SELECT STR(CAST(DATEPART (day, getdate()) AS float))返回一个字符串。你是否期待整数比较?

+0

正确,它是一个字符串。 – FMFF 2012-03-20 18:52:09

+4

@St这应该作为评论发布而不是答案。 – Taryn 2012-03-20 18:55:26

+3

@bluefeet - 你需要50个代表评论,所以这是不可能的。 – 2012-03-20 20:39:48