首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 實作進制轉換:二進位、八進位、十六進位轉十進位

     編輯:關於SqlServer

在 Oracle 資料庫環境中,利用 CONNECT BY 階層式查詢搭配 SUBSTR 逐字元拆解,再配合 POWER 次方運算,即可將任意進位字串轉換為十進位數值。以下提供三種常見進制的轉換範例,邏輯清晰,易於擴充至其他進制。

二進位轉十進位

SELECT SUM(data1)
FROM (
    SELECT SUBSTR('1101', ROWNUM, 1) * POWER(2, LENGTH('1101') - ROWNUM) AS data1
    FROM dual
    CONNECT BY ROWNUM <= LENGTH('1101')
);

八進位轉十進位

SELECT SUM(data1)
FROM (
    SELECT SUBSTR('1101', ROWNUM, 1) * POWER(8, LENGTH('1101') - ROWNUM) AS data1
    FROM dual
    CONNECT BY ROWNUM <= LENGTH('1101')
);

十六進位轉十進位

十六進位需處理 A-F 字元,使用 CASE 將字元對應至 10-15:

SELECT SUM(data1)
FROM (
    SELECT
        (CASE UPPER(SUBSTR('2D', ROWNUM, 1))
            WHEN 'A' THEN 10
            WHEN 'B' THEN 11
            WHEN 'C' THEN 12
            WHEN 'D' THEN 13
            WHEN 'E' THEN 14
            WHEN 'F' THEN 15
            ELSE SUBSTR('2D', ROWNUM, 1)
         END) * POWER(16, LENGTH('2D') - ROWNUM) AS data1
    FROM dual
    CONNECT BY ROWNUM <= LENGTH('2D')
);

原理解析:
CONNECT BY ROWNUM <= LENGTH(str) 產生 1 到字串長度的數列,SUBSTR(str, ROWNUM, 1) 逐一取出字元,乘以 POWER(基數, 位置權重) 後加總,即得十進位結果。此技巧常用於 ETL 資料清洗或異質資料整合情境。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved