3

当我在 SQL-Server 2008 中运行此代码时,

select case when '6/1/2012' < '6/1/2012' then 1 else 0 end

我得到0。

如果我跑,

select case when '6/1/2012 0:00:00.000' < '6/1/2012' then 1 else 0 end

我也得到0。

但是,如果我跑

select case when '6/1/2012' < '6/1/2012 0:00:00.000' then 1 else 0 end

我得到1。

为什么是这样?

4

2 回答 2

12

我的猜测是:

  1. 您正在比较两个字符串(查询中没有任何内容表明它们应该作为日期进行比较)。
  2. 如果两个字符串除了一个额外的字符之外都相等,则较长的字符串是“更大的”。

您可能期望您的数据库自动检测日期,但这将涉及解析您提供的每个字符串,以防它是一个日期,这会损害性能并且也可能令人困惑(如果某些东西被转换为日期并且您不是故意的让它成为)。

于 2012-07-17T21:52:54.980 回答
6

您必须将它们转换为datetime将它们作为datetime值进行比较。这返回0

select case when cast('6/1/2012' as datetime) < cast('6/1/2012 0:00:00.000' as datetime) then 1 else 0 end
于 2012-07-17T21:54:02.900 回答