繁体   English   中英

与SQL Server中的日期或日期时间列进行比较

[英]Comparing with date or datetime columns in SQL server

我们正在从Oracle迁移到SQL Server(使用SSMA)。 在我们的Oracle环境中,我们对某些列使用DATE数据类型,在SQL Server的数据类型映射期间,我们为对应的列设置DATETIME数据类型。

现在,假设我有一个如下表:

+--------+-------------+---------------------------+
| grn_id | grn_no      | grn_dt                    |
+--------+-------------+---------------------------+
| 1      | 0000000001  | 2018-01-03 00:00:00.000   |
| 2      | 0000000002  | 2018-01-03 00:00:00.000   |
| 3      | 0000000003  | 2018-01-03 00:00:00.000   |
| 4      | 0000000001  | 2018-01-27 00:00:00.000   |
+--------+-------------+---------------------------+

我正在尝试使用grn_dt(DATATYPE IS DATETIME)和类似'2018-01-27'的字符串来过滤此数据。 什么是正确的方法?

我们已经使用了转换函数,如下所示:

SELECT * FROM grn_header WHERE convert(date,grn_dt) <= '2018-01-27'

无论如何,我们正在获得所需的输出,但是这种转换正确吗?

我是否还需要如下设置字符串( '2018-01-27' )的转换?

SELECT * FROM grn_header WHERE convert(date,grn_dt) <= convert(date,'2018-01-27') 

有其他替代方法吗?

这可以:

where convert(date, grn_dt) <= '2018-01-27'

尽管有convert() ,SQL Server仍将在grn_dt上使用索引。

我也倾向于这样写:

where grn_dt < dateadd(day, 1, '2018-01-27')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM