代码之家  ›  专栏  ›  技术社区  ›  Randy Minder

SQLServer如何使用smalldatetime值评估此查询?

  •  -1
  • Randy Minder  · 技术社区  · 7 年前

    考虑以下演示查询和结果(请注意,两个查询的唯一区别是WHERE子句中的比较运算符):

    enter image description here

    3 回复  |  直到 7 年前
        1
  •  2
  •   David Browne - Microsoft    7 年前

    SQL Server正在将日期字符串转换为smalldatetime类型,并且 四舍五入到最接近的分钟,从而将日期字符串更改为 “2018年9月20日00:00:00 AM”。有人能证实吗?

    对。为了比较两个表达式,SQLServer总是将这两个表达式转换为公共数据类型。无论哪个表达式的数据类型 Data Type Precedence varchar 它的优先级比 smalldatetime . 因此字符串被转换为smalldatetime进行比较。您可以验证转换是否舍入到最接近的值:

    select cast( '2018-09-19 11:59:59' as smalldatetime)
    

    2018-09-19 12:00:00
    
        2
  •  0
  •   haag1    7 年前

    我想你可能打错了解释?您声明该列是smalldatetime,然后继续说您认为查询正在将“日期字符串转换为smalldatetime”。如果我所说的是正确的,那么简单的逻辑检查就会表明你的假设是正确的。是的,转换时将变为“09/20/2018 00:00:00 AM”。

    DECLARE @dateField AS date
    SET @dateField = '2018-09-20 06:23:00'
    SELECT CONVERT(smalldatetime, @dateField)
    
        3
  •  0
  •   paparazzo    7 年前

    它被清楚地覆盖在 documentation

    定义与一天中的某个时间组合的日期。时间是以时间为基础的 一天24小时,秒总是零(:00),没有

    如果你看你的结果都是00秒。