Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server如何使用smalldatetime值评估此查询?_Sql Server_Tsql - Fatal编程技术网

Sql server SQL Server如何使用smalldatetime值评估此查询?

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” 有人能证实这一点吗 我想你可能打错了解释?您声明该列

考虑以下演示查询,结果请注意,这两个查询的唯一区别是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秒