Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql INT转换为二进制,然后读取位_Sql_Sql Server - Fatal编程技术网

Sql INT转换为二进制,然后读取位

Sql INT转换为二进制,然后读取位,sql,sql-server,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中完成吗?不要在SQL中解码,使用它们后会很痛苦。 如果存储了号码,则只需使用如下表进行连接: Code Pattern 64 Sun

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

例如,
65=1000001

这意味着:

1:Sun
0:Mon
0:Tue
0:Wed
0:Thu
0:Fri
1:Sat
因此,我需要一个小临时工作台,上面有:

DayOfWeek:
Sunday
Saturday
因此,读取INT,并输出一个天数表


这可以在SQL Server中完成吗?

不要在SQL中解码,使用它们后会很痛苦。 如果存储了号码,则只需使用如下表进行连接:

Code     Pattern
64       Sun
96       Sun-Mon
或者你可以这样做,如果你想每行

Code     Pattern
64       Sun
96       Sun
96       Mon
甚至更好


否则会出现性能问题。

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

; 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
创建一个类似

colname值

太阳1号

周一| 2

周四星期二

星期三| 8

周四| 16

星期五| 32

周六| 64


将数据与表连接起来,并将值相加…

在DB和SQL中,连接总是比解码好。你们只有128个组合,若我是你们,我宁愿使用一个参考表。意思是在输出中,你们只想要有1个值的一天,对吗?也解释一下65=1000001,这个组合是如何工作的?我写的答案基本上是这个,所以改为+1。
union
中的
all
是不需要的:-)@Jcl,它实际上是需要的,因为它消除了检查重复项的需要。
union all
不检查重复项(
union
有)。。。事实上,我现在想到的
union all
应该会更快it@Jcl,这就是我一直在说的。“联合体中的所有”消除了检查重复项的需要。哇。。。tat的神奇的“松鼠”——看起来很完美。