SQL Server:用于计算日期与时间之和的函数

时间:2016-12-21 19:50:41

标签: sql sql-server tsql

我有2张日期表。首先11.12.2016 12:00:00:00011.12.2016 12:45:06:000

我知道那段日期之间的时间是45分06秒。

如何计算WHERE语句到SELECT所有时间超过45分钟的记录?

4 个答案:

答案 0 :(得分:0)

您可以使用DATEDIFF功能执行此操作。

SELECT * FROM Table
WHERE DATEDIFF(minute,Column1,Column2) > 45

您可以详细了解here

(不要忘记用相关名称替换Table Column1Column2。)

答案 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'