'6/1/2012'<'6/1/2012 0:00:00.000'=真?

Eri*_*son 3 sql sql-server

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

select case when '6/1/2012' < '6/1/2012' then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)

我得到0.

如果我跑,

select case when '6/1/2012 0:00:00.000' < '6/1/2012' then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)

我也得到0.

但是,如果我跑

select case when '6/1/2012' < '6/1/2012 0:00:00.000' then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)

我得到1.

为什么是这样?

Rei*_*ica 12

我的猜测是:

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

您可能希望您的数据库自动检测日期,但这将涉及解析您提供的每个字符串,以防它是一个日期,这会损害性能并且也可能令人困惑(如果某些内容转换为日期而您并不意味着因为它).


Jam*_* L. 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
Run Code Online (Sandbox Code Playgroud)