Sql server SQL Server如何使用smalldatetime值评估此查询?
考虑以下演示查询,结果请注意,这两个查询的唯一区别是WHERE子句中的比较运算符: LUpd_DateTime列是smalldatetime数据类型。由于smalldatetime数据类型实际上不包含任何秒舍入(向上或向下舍入到最接近的分钟),因此我对以下两个查询的唯一解释是,SQL Server正在将日期字符串转换为smalldatetime类型,并向上舍入到最接近的分钟,从而将日期字符串更改为“9/20/2018 00:00:00 AM”Sql server SQL Server如何使用smalldatetime值评估此查询?,sql-server,tsql,Sql Server,Tsql,考虑以下演示查询,结果请注意,这两个查询的唯一区别是WHERE子句中的比较运算符: LUpd_DateTime列是smalldatetime数据类型。由于smalldatetime数据类型实际上不包含任何秒舍入(向上或向下舍入到最接近的分钟),因此我对以下两个查询的唯一解释是,SQL Server正在将日期字符串转换为smalldatetime类型,并向上舍入到最接近的分钟,从而将日期字符串更改为“9/20/2018 00:00:00 AM” 有人能证实这一点吗 我想你可能打错了解释?您声明该列
有人能证实这一点吗 我想你可能打错了解释?您声明该列是smalldatetime,但接着说您认为查询正在将日期字符串转换为smalldatetime。如果我所说的是正确的,那么简单的逻辑检查就会证明你的假设是正确的。是的,转换时将变为2018年9月20日00:00:00 AM 将@dateField声明为日期 SET@dateField='2018-09-2006:23:00' 选择CONVERTsmalldatetime、@dateField SQL Server正在将日期字符串转换为smalldatetime类型,并且 四舍五入到最接近的分钟,从而将日期字符串更改为 “2018年9月20日00:00:00上午”。有人能证实这一点吗 对。要比较两个表达式,SQL Server始终将两个表达式转换为公共数据类型。将转换表达式的数据类型中具有较低值的数据类型。日期字符串是varchar类型的表达式,其优先级低于smalldatetime。因此,字符串被转换为smalldatetime进行比较。您可以验证转换是否舍入到最接近的值:
select cast( '2018-09-19 11:59:59' as smalldatetime)
输出
2018-09-19 12:00:00
这在报告中有明确的说明 定义与一天中某个时间组合的日期。时间是以时间为基础的 在一天24小时内,秒数始终为0:00,无 分数秒 如果你看你的结果,所有都是00秒