在22.3版本 LightDB 新增/修改了如下函数以加强对 Oracle 的兼容。下面对这些函数进行简单描述,具体案例等参考正式发版后的官方文档。
SELECT BIN_TO_NUM(1,0,1,0) FROM DUAL;
bin_to_num
------------
10
(1 row)
SELECT BITOR(5,3) FROM DUAL;
bitor
-------
7
(1 row)
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