sql - 与 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'
SQL Server 将使用索引(如果可用),grn_dt
尽管convert()
.
我也倾向于这样写:
where grn_dt < dateadd(day, 1, '2018-01-27')
推荐阅读
- python - 在数据框中将多个列分组在同一标题下
- regex - 谷歌分析中的什么正则表达式用于这种情况?
- c# - LINQ:使用 Linq 连接多个表列并从子表值中查找聚合总和
- selenium - 无法使用 HtmlUnitDriver 运行测试
- javascript - 如何正确拖放jqueryui
- sql - 我想用表情符号将内容存储在数据库中,但它显示错误
- javascript - bcrypt 模块面临的问题
- python - 使用 numpy 生成具有 case-when 条件的随机数据
- dask - 最新版本不支持 dask concat
- database - 如何定期将 Cassandra 表中的新行写入另一个表