Ant*_*ull 6 t-sql sql-server datetime
我知道解决方法是DATEADD用于两种数据类型.我想理解为什么语言设计者选择为一种数据类型而不是另一种数据类型定义此运算符?
当你尝试直接使用加号运算符 DATE
DECLARE @tomorrow DATE = CONVERT(DATE, GETDATE()) + 1
Run Code Online (Sandbox Code Playgroud)
你收到此错误信息:
消息206,级别16,状态2,行1
操作数类型冲突:日期与int不兼容
但是,您可以向a添加一个整数DATETIME,并且可以隐式地将其转换DATETIME为DATE没有错误的整数:
DECLARE @thisTimeTomorrow DATETIME = GETDATE() + 1
DECLARE @tomorrow DATE = GETDATE() + 1
Run Code Online (Sandbox Code Playgroud)
这是因为出于兼容性目的,SQL Server DATETIME 行为保持不变。自2008版本引入DATETIME2以来,禁止了整数相加的能力,同时也引入了DATE,这也禁止了相加。
最简单的解决方案是将加法移到 CONVERT 内:
DECLARE @tomorrow DATE = CONVERT(DATE, GETDATE() + 1)
Run Code Online (Sandbox Code Playgroud)
尽管我建议使用 DATEADD 而不是使用整数加法:
DECLARE @tomorrow DATE = CONVERT(DATE, DATEADD(DD, +1, GETDATE()))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |