鉴于以下组件
DECLARE @D DATE = '2013-10-13'
DECLARE @T TIME(7) = '23:59:59.9999999'
Run Code Online (Sandbox Code Playgroud)
将它们结合起来以产生DATETIME2(7)
具有价值的结果的最佳方法是'2013-10-13 23:59:59.9999999'
什么?
有些东西不工作,如下表所示。
SELECT @D + @T
Run Code Online (Sandbox Code Playgroud)
操作数数据类型日期对加法运算符无效。
SELECT CAST(@D AS DATETIME2(7)) + @T
Run Code Online (Sandbox Code Playgroud)
操作数数据类型 datetime2 对加法运算符无效。
SELECT DATEADD(NANOSECOND,DATEDIFF(NANOSECOND,CAST('00:00:00.0000000' AS TIME),@T),@D)
Run Code Online (Sandbox Code Playgroud)
datediff 函数导致溢出。分隔两个日期/时间实例的日期部分数量太大。尝试将 datediff 与不太精确的日期部分一起使用。
* 可以在 Azure SQL 数据库和 SQL Server 2016 中避免溢出,使用DATEDIFF_BIG
.
SELECT CAST(@D AS DATETIME) + @T
Run Code Online (Sandbox Code Playgroud)
数据类型 datetime 和 time 在 add 运算符中不兼容。
SELECT CAST(@D AS DATETIME) + CAST(@T AS DATETIME)
Run Code Online (Sandbox Code Playgroud)
返回结果但失去精度
2013-10-13 23:59:59.997
我查询此 SQL 查询:
SELECT * FROM [DB].[dbo].[Table]
WHERE [DATE] BETWEEN '01-01-2016' AND '31-03-2016'
AND ([TIME] >= '00:00:00' OR [DATE] > '01-01-2016')
AND ([TIME] <= '00:00:00' OR [DATE] < '31-03-2016');
Run Code Online (Sandbox Code Playgroud)
但在 SQL Studio 中,结果为另一个日期和时间。
[DATE] = VARCHAR(10) (DD-MM-YYYY)
[TIME] = VARCHAR(10) (HH:MM:SS) 24h
Run Code Online (Sandbox Code Playgroud)
怎么修 ?