如何在SQL中检查当前时间是否介于两次之间?

时间:2013-12-16 19:40:00

标签: sql sql-server tsql type-conversion

这不起作用:

IF EXISTS (( SELECT  1
            FROM    dbo.SalesOrder )
   AND (GETDATE() BETWEEN '07:00:00' AND '16:00:00'))
   BEGIN
         PRINT 'yes!'
   END

我想这样做:

如果SalesOrder表中存在某些内容并且当前时间是早上7点到下午4点,则打印“是”

我假设我可能不得不在那里进行转换,但我不确定如何正确地进行转换。

有人想帮我一把吗?

2 个答案:

答案 0 :(得分:9)

怎么样

SELECT top 1 'yes'
FROM    dbo.SalesOrder
WHERE datepart(hour, GETDATE()) BETWEEN 7 and 16

SQLFiddle demo

答案 1 :(得分:3)

如果您尝试比较同一天的日期时间,则需要删除GETDATE()的时间组件,然后添加X小时。还有一些其他转化here

IF EXISTS (( SELECT  1
            FROM    dbo.SalesOrder )
   AND (GETDATE() BETWEEN 
                      DATEADD(hh,7,(CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime))) AND DATEADD(hh,16,(CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime)))))
   BEGIN
         PRINT 'yes!'
   END