【问题标题】:Oracle Type CastingOracle 类型转换
【发布时间】:2011-05-25 13:17:22
【问题描述】:

如何在 Oracle 中执行以下操作?

SELECT  (cast field as bit) From Table

有没有办法将其转换为 Oracle 语句 使用类似于 cast 或 convert 的东西?

【问题讨论】:

  • “字段”列有什么类型?以及您想如何使用查询结果? Oracle 没有“位”类型。

标签: sql oracle


【解决方案1】:

如果您想了解如何进行二进制、十六进制、八进制转换,请参阅here。 (汤姆凯特摇滚)

例如,

SQL> select to_bin( 123 ) bin, to_hex( 123 ) hex, to_oct( 123 ) oct from dual
2  /

BIN             HEX             OCT
--------------- --------------- ---------------
1111011         7B              173

编辑: 如果您只是想查看某个位是否打开/关闭,您可以使用 bitand 函数(Oracle 开箱即用)。这里也展示了to_bin函数,但不需要使用bitand函数。

select to_bin(1234) bin,
  2             bitand(1234,1)+0 bit1,
  3             bitand(1234,2)+0 bit2,
  4             bitand(1234,4)+0 bit3
  5    from dual
  6  /

BIN                BIT1       BIT2       BIT3
------------ ---------- ---------- ----------
10011010010           0          2          0

您还可以使用幂函数来获取 bitand (2^n) 的第二个参数值。例如,幂(2,0),幂(2,1),幂(2,2)

【讨论】:

    【解决方案2】:
    CREATE OR REPLACE FUNCTION to_base (p_dec IN NUMBER, p_base IN NUMBER)
       RETURN VARCHAR2
    IS
       l_str   VARCHAR2 (255) DEFAULT NULL;
       l_num   NUMBER         DEFAULT p_dec;
       l_hex   VARCHAR2 (16)  DEFAULT '0123456789abcdef';
    BEGIN
       IF (p_dec IS NULL OR p_base IS NULL)
       THEN
          RETURN NULL;
       END IF;
    
       IF (TRUNC (p_dec) <> p_dec OR p_dec < 0)
       THEN
          RAISE PROGRAM_ERROR;
       END IF;
    
       LOOP
          l_str := SUBSTR (l_hex, MOD (l_num, p_base) + 1, 1) || l_str;
          l_num := TRUNC (l_num / p_base);
          EXIT WHEN (l_num = 0);
       END LOOP;
    
       RETURN l_str;
    END to_base;
    

    来源:https://www.club-oracle.com/threads/how-to-convert-decimal-to-hexadecimal.16083/

    【讨论】:

      【解决方案3】:

      Oracle/PLSQL: Cast Function

      强制转换函数的语法是:

      cast ( { expr | ( subquery ) | MULTISET ( subquery ) } AS type_name )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-02
        • 2013-05-09
        • 2021-04-27
        • 2019-06-03
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 2015-06-12
        相关资源
        最近更新 更多