sql - '6/1/201 2' < ' 6/1/2012 0 :00:00. 000' = 真?

标签 sql sql-server

当我在 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。

为什么是这样?

最佳答案

我的猜测是:

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

  • 您可能希望您的数据库自动检测日期,但这将涉及解析 你给它的字符串,以防它是一个日期,这会损害性能,也可能会造成混淆(如果某些东西被转换为日期而你并不是故意的)。

    关于sql - '6/1/201 2' < ' 6/1/2012 0 :00:00. 000' = 真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531380/

    相关文章:

    sql - 每月值的总和除以每月的天数

    mysql - 在单个查询中更新 2 个表中的随机记录

    mysql - 如何在“where”子句中使用用户定义的参数优化查询?

    mysql - 这个 SQL 语句有什么问题 - 错误

    mysql - SQL从多个表中选择计数

    sql - 如何从postgres中的字符串末尾应用split_part函数

    SQL 对一列中 2 个日期之间的数据求和

    sql-server - 隔离级别差异、SNAPSHOT 和 SNAPSHOT READ COMMITTED 快照?

    sql - 从单独的日期和时间字段转换为 DATETIME

    sql-server - 无法通过 EF ExecuteSqlCommand 重建索引