lightdb22.3特性预览-增强对oracle内置函数的兼容

Posted 紫无之紫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lightdb22.3特性预览-增强对oracle内置函数的兼容相关的知识,希望对你有一定的参考价值。

lightdb22.3特性预览 - 增强对oracle内置函数的兼容

在22.3版本 LightDB 新增/修改了如下函数以加强对 Oracle 的兼容。下面对这些函数进行简单描述,具体案例等参考正式发版后的官方文档。

数学相关函数

  • BIN_TO_NUM 转换多个0,1 为number
SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;
 bin_to_num 
------------
         10
(1 row)
  • BITOR/BITXOR 之前版本已支持BITAND, 对number进行比特运算, or/xor 运算
SELECT BITOR(5,3) FROM DUAL;
 bitor 
-------
     7
(1 row)
  • REMAINDER 计算余数,在计算时使用ROUND, 而MOD 使用floor
SELECT REMAINDER(5.5,2) FROM DUAL;
 remainder 
-----------
      -0.5
(1 row)
  • ROUND_TIES_TO_EVEN 四舍五入,具有和round(number)函数相同的输入参数, 目的是补充round(number)函数不能实现的场景,当存在两个数一样接近时,取偶数值。如2.4舍入为2,2.6舍入为3;2.5舍入为2,1.5舍入为2

    SELECT ROUND_TIES_TO_EVEN(0.25,1) "ROUND_EVEN" FROM DUAL;
     ROUND_EVEN 
    ------------
            0.2
    (1 row)
    

字符串相关函数

  • INSTRB 基于字节查找子串位置(字节)

    SELECT INSTRB('qwe测试abc', 'ab') FROM DUAL;
     instrb 
    --------
         10
    (1 row)
    
  • REGEXP_INSTR/REGEXP_REPLACE 改为C实现 通过正则表达式查找,修改字符串

  • REPLACE 查找并替换字符串中匹配的子串

    SELECT REPLACE('abcdAbcdasd', 'a') FROM DUAL;
      replace  
    -----------
     bcdAbcdsd
    (1 row)
    
  • SOUNDEX 返回由四个字符组成的代码 (SOUNDEX) 以评估两个字符串在发音时的相似性,一般用于查找发音相同字符串

    SELECT SOUNDEX('SMYTHE')=SOUNDEX('Smith') as same FROM DUAL;
     same 
    ------
     t
    (1 row)
    

日期时间相关函数

  • MONTHS_BETWEEN 修改以与oracle 语义一致,之前版本会丢弃入参的时分秒信息

  • TZ_OFFSET 获取时区的偏移

    SELECT TZ_OFFSET('Asia/Shanghai') FROM DUAL;
     tz_offset 
    -----------
     08:00:00
    (1 row)
    

格式转换

  • CONVERT 转换字符串编码

     SELECT CONVERT('娴嬭瘯', 'gbk', 'utf8') from dual; FROM DUAL;
     convert 
    ---------
     测试
    (1 row)
    
  • NUMTOYMINTERVAL 把number 转为INTERVAL

    SELECT NUMTOYMINTERVAL(1,'YEAR') FROM DUAL;
     numtoyminterval 
    -----------------
     1 year
    (1 row)
    
  • TO_BLOB 把raw 转为blob

聚合函数

  • ANY_VALUE 会选择被分到同一组的数据里第一条数据的指定列值作为返回数据, 主要用于group by 场景下,通过使用 ANY_VALUE 消除了将每一列指定为GROUP BY 子句的一部分的必要性

    create table test_any_value(key1 int, key2 int);
    insert into test_any_value values(1, 1);
    select any_value(key2)  from test_any_value group by key1;
     any_value 
    -----------
             1
    (1 row)
    
  • BIT_AND_AGG/BIT_OR_AGG/BIT_XOR_AGG 位聚合运算, 对同一组数据进行位运算

    select bit_and_agg(column1)  from (values (1),(2),(4),(8)) x;
     bit_and_agg 
    -------------
               0
    (1 row)
    
  • KURTOSIS_POP/KURTOSIS_SAMP 用于确定给定数据分布的异常值特征 总体峰度/样本峰度

    select kurtosis_pop(column1) from  (values (1),(2),(4),(8)) x;
          kurtosis_pop       
    -------------------------
     -1.09897920604914942667
    (1 row)
    
  • SKEWNESS_POP/SKEWNESS_SAMP 用于确定给定数据分布的对称性 总体偏度/样本偏度

其他

  • NLS_CHARSET_ID /NLS_CHARSET_NAME 只是为了兼容oracle, CHARSET 为oracle 的CHARSET

    SELECT NLS_CHARSET_ID('AL32UTF8') FROM DUAL;
     nls_charset_id 
    ----------------
                873
    (1 row)
    
  • SYS_CONTEXT/USERENV SYS_CONTEXT 获取当前session 信息或判断当前用户role, USERENV 获取参数当前session 信息

  • EMPTY_CLOB 获取空的clob, 目前实现为返回‘’

  • ORA_HASH 计算hash

  • VSIZE 获取表达式内部占用的字节数,等同于pg_column_size

以上是关于lightdb22.3特性预览-增强对oracle内置函数的兼容的主要内容,如果未能解决你的问题,请参考以下文章

lightdb22.3预览-listagg 增强

lightdb22.3预览-listagg 增强

lightdb22.3-oracle系统视图兼容增强

lightdb22.3-oracle系统视图兼容增强

lightdb22.3-oracle 内置包兼容增强

lightdb22.3-oracle 内置包兼容增强