一位朋友在SQL中询问如何将表示八进制值的varchar转换为整数,所以我在这里找一个答案,看看是否有人改进了它。
我曾希望有一个可以作为查询的一部分内联运行的解决方案,而不必在数据库中创建任何函数(例如,如果您只有查询数据库的权限,而不是创建任何新函数或存储过程)它)。
或者,我看到.Net Framework ToInt32方法可以很容易地实现这一点,但似乎需要跳过很多CLR集成环境才能实现这一目标。
答案 0 :(得分:2)
这是我的快速肮脏的迭代版本:
CREATE FUNCTION dbo.fn_OctalToInt(@OctalVal varchar(50)) RETURNS BIGINT AS
BEGIN
DECLARE @pos tinyint = 0
DECLARE @tot bigint = 0
WHILE @pos < LEN(@OctalVal) BEGIN
set @tot = @tot + cast(SUBSTRING(@OctalVal, len(@OctalVal) - @pos, 1) as tinyint) * power(8,@pos)
set @pos = @pos + 1
END
RETURN @tot
END
答案 1 :(得分:2)
有点复杂 - 需要2级标量子查询
设置&amp;查询强>
declare @t table (oct varchar(10));
insert @t select '7101';
insert @t select '6';
insert @t select '110111';
select *,
(select sum(val)
from
(
select substring(reverse(t.oct), v.number, 1) * power(8, v.number-1) val
from master..spt_values v
where v.type='p' and v.number between 1 and len(t.oct)
) x
) intVal
from @t t;
<强>结果
oct intVal
---------- -----------
7101 3649
6 6
110111 36937