Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取SQL中的特定时间阈值_Sql_Sql Server_Tsql_Sql Server 2008 - Fatal编程技术网

获取SQL中的特定时间阈值

获取SQL中的特定时间阈值,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,我有一个控制台应用程序,它将根据用户是否选择每天在一天中的特定时间收到通知以及用户选择每小时收到通知的所有记录来选择记录。 作业将每15分钟运行一次。 我如何找到一个时间阈值,该阈值介于一小时的最高峰前5分钟和最高峰后5分钟之间 这是我的密码 Declare @Now datetime Declare @NowHour int Declare @NowMinute int Declare @NewNow nvarchar(50) Set @Now = {fn Now()} Set @NowHo

我有一个控制台应用程序,它将根据用户是否选择每天在一天中的特定时间收到通知以及用户选择每小时收到通知的所有记录来选择记录。 作业将每15分钟运行一次。 我如何找到一个时间阈值,该阈值介于一小时的最高峰前5分钟和最高峰后5分钟之间

这是我的密码

Declare @Now datetime
Declare @NowHour int
Declare @NowMinute int
Declare @NewNow nvarchar(50)

Set @Now = {fn Now()}
Set @NowHour = (SELECT DATENAME(hh, @Now))
Set @NowMinute = (SELECT DATENAME(mi, @Now))
Set @NewNow = Cast(Cast(@NowHour As nvarchar(2)) + ':' + Cast(@NowMinute As nvarchar(2)) as Time)
Select @Now, @NowHour, @NowMinute, @NewNow

Select *  From vw_consumerAlerts 
Where  casexid not in
(Select casexid from alerthistory)  
And Name = 'Always' 
Or ([Hour] Between DateAdd(minute, -5, @NewNow) And DateAdd(minute, -5, @NewNow))
这就是我得到的错误

The data types time and datetime are incompatible in the greater than or equal to operator.
我知道了,我把[Hour]和@NewNow调换了,现在我得到了正确的结果:

    (@NewNow Between DateAdd(minute, -5, [Hour]) And DateAdd(minute, 5, [Hour]))

假设您已将@TheHour定义为00分/秒的小时:

WHERE mydatecol BETWEEN DATEADD(minute, -5, @TheHour) AND DATEADD(minute, 5, @TheHour)
更新

见此:

select 1
where cast('1/1/2010 1:04pm' as time) 
    between cast('1/1/2010 12:55pm' AS time) 
    and cast ('1/1/2010 1:05pm' as time)
时间和日期时间是不同的,所以您需要像我在这里的粗略示例中所做的那样,不时地转换您的日期时间

因此,在你的情况下:

Select *  From vw_consumerAlerts 
Where  casexid not in
    (Select casexid from alerthistory)  
And Name = 'Always' 
Or ([Hour] Between cast(DateAdd(minute, -5, @NewNow) as time)
    And cast(DateAdd(minute, -5, @NewNow) as time))

我假设你没有先测试这个,dateadd(分钟,-5,@theHour)GAH我总是把这两个参数颠倒过来。抱歉,正在修复。我将我的sql代码放在上面,中间代码似乎不起作用。我错过了一些小而愚蠢的东西我知道。。。我想,[Hour]列被定义为时间(0),其值为06:00:00和15:00:00,以此类推