相关疑难解决方法(0)

如何在 SQL Server 中将日期和时间与 datetime2 结合起来?

鉴于以下组件

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-server datatypes date time datetime2

55
推荐指数
3
解决办法
6万
查看次数

查询日期范围

我查询此 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)

怎么修 ?

sql-server sql-server-2000 date time

0
推荐指数
1
解决办法
4599
查看次数

标签 统计

date ×2

sql-server ×2

time ×2

datatypes ×1

datetime2 ×1

sql-server-2000 ×1