确定 getdate() 的时间部分是否在特定时间间隔内
Establish if time portion of getdate() is in a specific interval
我有一个包含 3 列的 table:
Index, Time_start, Time_stop
Time
列的类型为 time(7)
。
我需要一个视图(或 select 语句),它将列出三列以及第四列,如果脚本是每行的 运行 是否介于 Time_start
和 Time_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
我有一个包含 3 列的 table:
Index, Time_start, Time_stop
Time
列的类型为 time(7)
。
我需要一个视图(或 select 语句),它将列出三列以及第四列,如果脚本是每行的 运行 是否介于 Time_start
和 Time_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