我有这个表,其中的列与一周中的几天以及fromTime到toTime相对应。我想知道如何通过日期筛选表格。我下面有这个代码。日期必须返回第3行,因为它是第一个满足规则的行。
我的表属性如下:
周一 | 周二周三周四周五从时间到时间||||
---|---|---|---|---|
1 | 0 | 000:02:00 | 23:59:59 | |
0 | 1 | 1 | 0 | |
0 | 0 | 1 | <1>00:00:0023:59:59
如果一周中的某一天是一列,存储一个数字,那么查询可能会更简单。但如果你必须使用现有的结构,试着确定星期几的数字,然后将其与每个"数字"进行比较;"天";列:
DECLARE @DOW INT
SET @DOW = ((DatePart(dw, getDate()) + @@DATEFIRST-1) % 7+1);
SELECT *
FROM YourTable
WHERE FromTime <= CAST(getDate() AS TIME)
AND ToTime >= CAST(getDate() AS TIME)
AND (
( @DOW = 2 AND Monday = 1 )
OR
( @DOW = 3 AND Tuesday = 1 )
OR
( @DOW = 4 AND Wednesday = 1 )
OR
( @DOW = 5 AND Thursday = 1 )
OR
( @DOW = 6 AND Friday = 1 )
)
Monday | |
---|---|
0 |
DECLARE @dotw NVARCHAR(20)
DECLARE @sql NVARCHAR(255)
DECLARE @sqlInsert NVARCHAR(255)
SET @requestDate = '2022-03-03 00:00:00.0000000'
SET @dotw = datename(w, @requestDate)
SET @sql = 'select * from [YourTable] where [YourTable].' + QUOTENAME(@dotw) + ' = 1'
EXEC sp_executesql @sql
我的答案。这里唯一的问题是将exec的结果存储在cte中。