INT到二进制,然后读取位

时间:2016-05-25 04:55:55

标签: sql sql-server

我的数据库中有一个INT值,实际上存储了一周中选定的几天。

例如,65 = 1000001

这意味着:

1:Sun
0:Mon
0:Tue
0:Wed
0:Thu
0:Fri
1:Sat

那么,我需要使用一个小的临时表:

DayOfWeek:
Sunday
Saturday

所以,读取INT,输出一个天数表。

可以在SQL Server中完成吗?

3 个答案:

答案 0 :(得分:4)

; with tbl as
(
    select  col = 65    union all
    select  col = 3
)
select  *
from    tbl t
    cross apply
    (
        select DayOfWeek = 'Sun' where col & 64 = 64    union all
        select DayOfWeek = 'Mon' where col & 32 = 32    union all
        select DayOfWeek = 'Tue' where col & 16 = 16    union all
        select DayOfWeek = 'Wed' where col &  8 =  8    union all
        select DayOfWeek = 'Thu' where col &  4 =  4    union all
        select DayOfWeek = 'Fri' where col &  2 =  2    union all
        select DayOfWeek = 'Sat' where col &  1 =  1
    ) d

答案 1 :(得分:0)

不要在SQL中解码,使用它们会很痛苦。 如果您已存储该号码,则只需加入以下表格:

Code     Pattern
64       Sun
96       Sun-Mon

如果你想要每行

,你可以这样做
Code     Pattern
64       Sun
96       Sun
96       Mon

甚至更好。

否则您将遇到性能问题。

答案 2 :(得分:0)

在DB和SQL中,如果需要,加入总是比解码更好。

创建一个类似

的表格

colname值

太阳| 1

周一| 2

星期二| 4

周三| 8

周四| 16

周五| 32

周六| 64

使用表格加入数据并总结值...