[英]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.