我对特定整数字段存储数据的方式遇到了一些心理障碍。
具体来说,有一个整数的列,范围从1到127;每个整数表示一周中不同日期的组合。例如:星期一= 2 ^ 0或1,星期二= 2 ^ 2或2,星期三= 2 ^ 3或8;可选择添加,周一+周二= 3。
我已经能够使用找到的here示例部分提取日期值。但是,当两天加在一起时(例如,星期一+星期二= 3),该特定示例不起作用。有人能指出我正确的方向吗?
仅供参考,我使用的是SQL Server 2008 R2。我很抱歉,如果之前已经发布过,我看了看但却无法找到任何其他帖子。
答案 0 :(得分:2)
似乎你可以抓住你需要的位并将结果存储在他们自己的字段中,用于一周中的每一天。
SELECT
cast(day_of_week & 1 as bit) AS 'Monday',
cast(day_of_week & 2 as bit) AS 'Tuesday',
cast(day_of_week & 4 as bit) AS 'Wednesday',
cast(day_of_week & 8 as bit) AS 'Thursday',
etc...
答案 1 :(得分:2)
您正在处理的内容称为按位运算符。
这里有good read,上面有简单明了的例子。
为了完整起见,以下是您在每周的每一天分解为列的内容。
DECLARE @bitwise TABLE (someValue TINYINT)
INSERT INTO @bitwise (someValue)
SELECT 1 UNION
SELECT 5 UNION
SELECT 127
SELECT someValue, CASE WHEN (1&someValue)=1 THEN 'SUNDAY' END
, CASE WHEN (2&someValue)=2 THEN 'MONDAY' END
, CASE WHEN (4&someValue)=4 THEN 'TUESDAY' END
, CASE WHEN (8&someValue)=8 THEN 'WEDNESDAY' END
, CASE WHEN (16&someValue)=16 THEN 'THURSDAY' END
, CASE WHEN (32&someValue)=32 THEN 'FRIDAY' END
, CASE WHEN (64&someValue)=64 THEN 'SATURDAY' END
FROM @bitwise
答案 2 :(得分:0)
您最需要使用按位运算符。
SELECT *
FROM Table
WHERE DaysOfWeek & 3 = 3
或者,如果它更有意义:
SELECT *
FROM Table
WHERE DaysOfWeek & 1 = 1
AND DaysOfWeek & 2 = 2
我强烈建议您使用@JNevill描述的查询创建一个VIEW。