SELECT
CASE WHEN '04/10/2006' < '07/01/2013' THEN 'TRUE' ELSE 'FALSE'
END
输出:TRUE
SELECT
CASE WHEN '10/31/2006' > '07/01/2012' THEN 'TRUE' ELSE 'FALSE'
END
输出:TRUE
这太令人困惑了。我执行了这两个查询,我的o / p为两个查询都是真的。 o / p到1st查询是正确的。第二个查询的输出不应该是假的。有人可以帮忙吗?
答案 0 :(得分:3)
这些字符串没有显式或隐式转换为date
数据类型。
SQL Server中日期/时间文字的唯一真正安全格式,至少对于datetime
和smalldatetime
,是:YYYYMMDD
和YYYY-MM-DDThh:mm:ss[.nnn]
- {{3} }
试试这个:
select
case
when convert(date,'20060410') < convert(date,'20130701') then 'true'
else 'false'
end
select
case
when convert(date,'20061031') > convert(date,'20120701') then 'true'
else 'false'
end
答案 1 :(得分:1)
始终使用标准日期格式。那你就不会有问题了。我更喜欢YYYY-MM-DD,几乎在所有情况下都会转换为正确的日期(如果省略连字符,转换将始终有效):
select (case '2006-04-10' < '2013-07-01' then 'TRUE' else 'FALSE'
end) as output_1
(case '2006-10-31 > '2012-07-01' then 'TRUE' else 'FALSE'
end) as output_2
使用正确的格式时,比较将作为字符串或日期使用。
答案 2 :(得分:0)
您正在比较字符串而不是日期,因此您首先必须将其转换为日期,然后您可以对其进行比较。
以下是您的问题的解决方案:
选择 铸造时的情况(&#39; 10/31/2006&#39; as datetime)&gt;演员(&#39; 07/01/2012&#39;作为日期时间)然后&#39; TRUE&#39; ELSE&#39; FALSE&#39; END
享受!!