在SQL中将八进制转换为十进制

时间:2012-11-16 02:18:06

标签: sql-server sql-server-2008

一位朋友在SQL中询问如何将表示八进制值的varchar转换为整数,所以我在这里找一个答案,看看是否有人改进了它。

我曾希望有一个可以作为查询的一部分内联运行的解决方案,而不必在数据库中创建任何函数(例如,如果您只有查询数据库的权限,而不是创建任何新函数或存储过程)它)。

或者,我看到.Net Framework ToInt32方法可以很容易地实现这一点,但似乎需要跳过很多CLR集成环境才能实现这一目标。

2 个答案:

答案 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