Sql 将按位整数值转换为月日掩码
如果我不知道,我道歉。我现在只写了大约3年的T-SQL,大部分都是自学的。在我的工作中,我们将月日值存储在位掩码中。例如,1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转换为1,1234567891011213141516171819202122232425262728293031转换为2147483647。我想要/需要做的是将int值转换为包含数字和“x”字符的varchar(64)。我这里有另一段代码,它做了一些类似的调整,但它向后提供了数据(从右到左[二进制应该是这样],而不是从左到右) 它也不提供所有字符。所有31个字符都必须回填Sql 将按位整数值转换为月日掩码,sql,sql-server,tsql,common-table-expression,Sql,Sql Server,Tsql,Common Table Expression,如果我不知道,我道歉。我现在只写了大约3年的T-SQL,大部分都是自学的。在我的工作中,我们将月日值存储在位掩码中。例如,1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx转换为1,1234567891011213141516171819202122232425262728293031转换为2147483647。我想要/需要做的是将int值转换为包含数字和“x”字符的varchar(64)。我这里有另一段代码,它做了一些类似的调整,但它向后提供了数据(从右到左[二进制应该是这样]
我也为这一点玩过 您可以使用数字表将
@i
拆分为位,然后将位连接成varchar(32)
值:
DECLARE @i int = 42;
WITH bits AS (
SELECT
number,
B = CASE @i & POWER(2, number - 1) WHEN 0 THEN 'x' ELSE '1' END
FROM master..spt_values
WHERE type = 'P'
AND number BETWEEN 1 AND 31
)
SELECT CAST((
SELECT '' + B
FROM bits
ORDER BY number
FOR XML PATH ('')
) AS varchar(32))
结果:
--------------------------------
x1x1x1xxxxxxxxxxxxxxxxxxxxxxxxx
此解决方案使用一个称为数字表的系统表,但使用自己的系统表并不是一个坏主意。“1234567891011213141516171819202122232425262728293031如何转换为2147483647”?一个位掩码肯定只能是1和0吗?@Phil这个53个字符的字符串
1234567891011213141516171819202122232425262728293031
将一个月的所有31天连接起来<二进制代码>1111111111111111111十进制代码=2147483647
哦,我明白了。这不是很明显!谢谢我很抱歉,我刚刚看到这个。。。我没有注意到有人回答!我会在第一个可能的机会尝试这个。
--------------------------------
x1x1x1xxxxxxxxxxxxxxxxxxxxxxxxx