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

Establish if time portion of getdate() is in a specific interval

我有一个包含 3 列的 table:

Index, Time_start, Time_stop

Time 列的类型为 time(7)

我需要一个视图(或 select 语句),它将列出三列以及第四列,如果脚本是每行的 运行 是否介于 Time_startTime_stop 之间。

我尝试使用 case 语句:

case getdate() between Time_start and Time_stop then 'Yes' 

但它不起作用。

您可以通过将 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

警告

这不会过滤日期,所以我假设您正在查询的记录集中的所有记录都是同一天的,否则这也会获取其他日期的记录。

您对 CASE 表达式的想法是正确的,但是您需要 GETDATE()TIME 部分,如评论中所述:

SELECT *,CASE WHEN CAST(GETDATE() AS TIME) BETWEEN Time_start AND Time_stop 
              THEN 'In' ELSE 'Out' 
         END AS In_Out
FROM YourTable

考虑添加带有 case 语句的计算列 'state'

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