SQL 服务器创建大于 POWER(2,30) 的位集
SQL Server create bitset larger than POWER(2,30)
select POWER(2,31)
select CAST(POWER(2,31) as bigint)
两者都会导致错误:
Arithmetic overflow error for type int, value = 2147483648.000000.
我需要生成超过 64 位的位掩码。我如何在 SQL 服务器中执行此操作? (我正在使用 SQL Server 2008,但如果它只能在 2012+ 中使用,我也想知道)
SELECT CAST(POWER(2.0,31.0) AS DECIMAL(38,0))
编辑:
最好的方法可能是使用预先计算的值创建自定义计数 table:
╔═════╦═════════════════════╗
║ n ║ Power_2^n ║
╠═════╬═════════════════════╣
║ 1 ║ 1 ║
║ 2 ║ 2 ║
║ 3 ║ 8 ║
║ 4 ║ 16 ║
║ 5 ║ 32 ║
║ ... ║ ... ║
║ 62 ║ 4611686018427387904 ║
║ ... ║ ... ║
╚═════╩═════════════════════╝
确认,在 SQL Server Central (http://www.sqlservercentral.com/Forums/Topic619623-338-1.aspx) 上找到这个:
select POWER(CAST(2 AS BIGINT),CAST(31 AS BIGINT))
select POWER(2,31)
select CAST(POWER(2,31) as bigint)
两者都会导致错误:
Arithmetic overflow error for type int, value = 2147483648.000000.
我需要生成超过 64 位的位掩码。我如何在 SQL 服务器中执行此操作? (我正在使用 SQL Server 2008,但如果它只能在 2012+ 中使用,我也想知道)
SELECT CAST(POWER(2.0,31.0) AS DECIMAL(38,0))
编辑:
最好的方法可能是使用预先计算的值创建自定义计数 table:
╔═════╦═════════════════════╗
║ n ║ Power_2^n ║
╠═════╬═════════════════════╣
║ 1 ║ 1 ║
║ 2 ║ 2 ║
║ 3 ║ 8 ║
║ 4 ║ 16 ║
║ 5 ║ 32 ║
║ ... ║ ... ║
║ 62 ║ 4611686018427387904 ║
║ ... ║ ... ║
╚═════╩═════════════════════╝
确认,在 SQL Server Central (http://www.sqlservercentral.com/Forums/Topic619623-338-1.aspx) 上找到这个:
select POWER(CAST(2 AS BIGINT),CAST(31 AS BIGINT))