首页 > 解决方案 > 与 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') 

有没有其他方法可以做到这一点?

标签: sqlsql-serverdate

解决方案


这可以:

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

SQL Server 将使用索引(如果可用),grn_dt尽管convert().

我也倾向于这样写:

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

推荐阅读