确定getdate()的时间部分是否在特定时间间隔内

时间:2015-02-24 15:11:45

标签: sql sql-server tsql

我有一个包含3列的表格:

Index, Time_start, Time_stop

Time列的类型为time(7)

我需要一个视图(或select语句),它将列出三列以及第四列,如果脚本运行的时刻是InOut每行{1}}和Time_start

我尝试使用案例陈述:

Time_stop

但它不起作用。

3 个答案:

答案 0 :(得分:0)

您可以将GETDATE()的值转换为TIME

来实现
-- you may need to change these times to values relevant to your local time
DECLARE @time1 AS TIME(7) = '12:15'
DECLARE @time2 AS TIME(7) = '16:15'

SELECT @time1 AS Time_start, @time2 AS Time_stop
INTO #tmp_time

SELECT *, 
       CASE WHEN CONVERT(TIME(7), GETDATE()) BETWEEN Time_start AND Time_stop 
            THEN 'In' 
            ELSE 'Out' 
       END
FROM #tmp_time

DROP TABLE #tmp_time

<强>买者

这不会过滤日期,因此我假设您要查询的记录集中的所有记录都是在同一天,否则这将记录其他日期的记录。

答案 1 :(得分:0)

您对CASE表达式有正确的想法,但您需要评论中提到的TIME的{​​{1}}部分:

GETDATE()

答案 2 :(得分:0)

考虑添加计算列&#39; state&#39;用案例陈述

               alter table tbl
               add column STATE AS 
               CASE WHEN CAST(GETDATE() AS TIME) 
               BETWEEN 
               Time_start AND Time_stop 
               THEN 'In' 
               ELSE 'Out' 
               END