我有2张日期表。首先11.12.2016 12:00:00:000
和11.12.2016 12:45:06:000
。
我知道那段日期之间的时间是45分06秒。
如何计算WHERE
语句到SELECT
所有时间超过45分钟的记录?
答案 0 :(得分:0)
您可以使用DATEDIFF
功能执行此操作。
SELECT * FROM Table
WHERE DATEDIFF(minute,Column1,Column2) > 45
您可以详细了解here。
(不要忘记用相关名称替换Table
Column1
和Column2
。)
答案 1 :(得分:0)
DATEDIFF(second,...
最长可达1秒
使用DATEDIFF(minute,...
时,每个方向的错误最多为1分钟。
SELECT *
FROM mytable
WHERE DATEDIFF(second,date_col_1,date_col_2) > 45*60
这就是为什么你不想在minute
上使用datediff来查找分钟的日期差异
declare @date1 datetime = '2016-12-01 00:00:00'
,@date2 datetime = '2016-12-01 00:01:59.99'
select datediff(minute,@date1,@date2) as datediff_minute
,datediff(second,@date1,@date2) as datediff_second
+-----------------+-----------------+
| datediff_minute | datediff_second |
+-----------------+-----------------+
| 1 | 119 |
+-----------------+-----------------+
declare @date1 datetime = '2016-12-01 00:00:59.99'
,@date2 datetime = '2016-12-01 00:01:00'
select datediff(minute,@date1,@date2) as datediff_minute
,datediff(second,@date1,@date2) as datediff_second
+-----------------+-----------------+
| datediff_minute | datediff_second |
+-----------------+-----------------+
| 1 | 1 |
+-----------------+-----------------+
答案 2 :(得分:0)
你可以尝试创建这样的函数:
create function dbo.fn_diffdates ( @date1 datetime, @date2 datetime)
returns bit
as begin
declare @retValue bit = 0;
SET @retValue = iif( datediff(minute, @date2, @date2) > 45, 1, 0)
return @retValue
end
并查询如下
select * from yourtable where dbo.fn_diffdates(date1, date2) = 1
答案 3 :(得分:-1)
select convert(varchar(50),datediff(MINUTE, '11-12-2016 12:00:00:000', '11-12-2016 12:45:06:000' )) +' Minutes ' , convert(varchar(50),datediff(ss, '11-12-2016 12:00:00:000', '11-12-2016 12:45:06:000' ) % 60)+ ' Seconds'