22,209
社区成员
发帖
与我相关
我的任务
分享
declare @i int
declare @v nvarchar(100)
set @i = 3 --你输入的数字
set @v = ''
SELECT @v = @v+ CASE WHEN @i & v1 <> 0 then ','+v2 else '' end
FROM
(
SELECT 1 v1,'星期日' v2 union all
SELECT 2,'星期一' union all
SELECT 4,'星期二' union all
SELECT 8,'星期三' union all
SELECT 16,'星期四' union all
SELECT 32,'星期五' union all
SELECT 64,'星期六'
)t
select stuff(@v,1,1,'')
/*
星期日,星期一
*/
declare @i int
declare @v nvarchar(100)
set @i = 63 --你输入的数字
set @v = ''
SELECT @v = @v+ CASE WHEN @i & v1 <> 0 then ','+v2 else '' end
FROM
(
SELECT 1 v1,'星期日' v2 union all
SELECT 2,'星期一' union all
SELECT 4,'星期二' union all
SELECT 8,'星期三' union all
SELECT 16,'星期四' union all
SELECT 32,'星期五' union all
SELECT 64,'星期六'
)t
select stuff(@v,1,1,'')
/*
星期日,星期一,星期二,星期三,星期四,星期五
*/
DECLARE @Num int=63;
SELECT @Num num,res=@Num&[Value]
FROM dbo.[Split]('1,2,4,8,16,32,64,128,256,512,1024,2048',',') s
WHERE @Num&[Value] >0
--结果
num res
----------- -----------
63 1
63 2
63 4
63 8
63 16
63 32
(6 行受影响)
--其他
DECLARE @Num int=48;
SELECT @Num num,res=@Num&[Value]
FROM dbo.[Split]('1,2,4,8,16,32,64,128,256,512,1024,2048',',') s
WHERE @Num&[Value] >0
num res
----------- -----------
48 16
48 32
(2 行受影响)
dbo.Split方法见
http://blog.csdn.net/feiazifeiazi/article/details/17242355