SQL Server - 日期比较

时间:2017-07-24 17:38:43

标签: sql sql-server

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查询是正确的。第二个查询的输出不应该是假的。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

这些字符串没有显式或隐式转换为date数据类型。

SQL Server中日期/时间文字的唯一真正安全格式,至少对于datetimesmalldatetime,是:YYYYMMDDYYYY-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

享受!!