数据加工函数说明
字符串函数
ltrim
- @LTRIM ##取消字符串左侧空格 一个参数
rtrim
- @RTRIM ##取消字符串右侧空格 一个参数
trim
- @TRIM ##取消字符串两侧空格 一个参数
upper
- @UPPER ##字符串转换为大写 一个参数
lower
- @LOWER ##字符串转换为小写 一个参数
substr
- @SUBSTR ##字符串截取
语法:SUBSTR(string,start, [length])
string:表示源字符串,即要截取的字符串。
start:开始位置,从1开始查找。如果start是负数,则从string字符串末尾开始算起。
length:可选项,表示截取字符串长度。
示例:@SUBSTR('',0) result[1]: '' @SUBSTR('abcd',0) result[1]: '' @SUBSTR('abcd',1) result[4]: 'abcd' @SUBSTR('abcd',5) result[1]: '' @SUBSTR('abcd',1,2) result[2]: 'ab' @SUBSTR('abcd',1,5) result[4]: 'abcd' @SUBSTR('abcd',1,0) result[1]: '' @SUBSTR('abcd',1,-1) result[1]: '' @SUBSTR('abcd',-1) result[1]: 'd' @SUBSTR('abcd',-5) result[1]: '' @SUBSTR('abcd',-1,2) result[1]: 'd' @SUBSTR('abcd',-1,0) result[1]: '' @SUBSTR('abcd',-1,-1) result[1]: ''
concat
strcmp
- @STRCMP ##比对两边的字符串, 两个参数, 两边字符串相同,返回结果为0,如果左边大于右边,返回1,如果左边小于右边,返回-1
示例:@STRCMP('','') result[1]: '0' @STRCMP('','asd') result[2]: '-1' @STRCMP('asd','') result[1]: '1' @STRCMP('asb','abc') result[1]: '1' @STRCMP('asb','asbf') result[2]: '-1' @STRCMP('asb','as') result[1]: '1' @STRCMP('asb','asb') result[1]: '0'
stricmp
length
- @LENGTH ##获取字符串长度 一个参数
instr
- @INSTR ##在string中查找child_string ,从start给出的数值开始在string中检索,检索在string中第show_time次出现child_string起始位置。
示例:语法:INSTR(string,child_string,[start],[show_time]) string:表示源字符串。 child_string:子字符串,即要查找的字符串。 start:可选项,开始位置,默认从1开始。如果为负数,则从右向左检索。 show_time:可选项,表示子字符串第几次出现在源字符串当中,默认第1次,负数或0则报错。
@INSTR('abcdbc', 'bc') result[1]: '2' @INSTR('abcdbc', 'bc',0) result[1]: '0' @INSTR('abcdbc', 'bc',2) result[1]: '2' @INSTR('abcdbc', 'bc',2,1) result[1]: '2' @INSTR('abcdbc', 'bc',2,2) result[1]: '5' @INSTR('abcdbc', 'bc',2,3) result[1]: '0' @INSTR('abcdbc', 'bc',3) result[1]: '5' @INSTR('abcdbc', 'bc',3,2) result[1]: '0' @INSTR('abcdbc', 'bc',6) result[1]: '0' @INSTR('abcdbc', 'bc',8) result[1]: '0' @INSTR('abcdbc', 'bc',-1) result[1]: '5' @INSTR('abcdbc', 'bc',-2) result[1]: '5' @INSTR('abcdbc', 'bc',-2,1) result[1]: '5' @INSTR('abcdbc', 'bc',-2,2) result[1]: '2' @INSTR('abcdbc', 'bc',-2,3) result[1]: '0' @INSTR('abcdbc', 'bc',-5) result[1]: '2' @INSTR('abcdbc', 'bc',-5,2) result[1]: '0' @INSTR('abcdbc', 'bc',-8) result[1]: '0' @INSTR('abcdbc', '') result[1]: '0' @INSTR('', 'abcde') result[1]: '0'
replace
- @REPLACE ##替換字符串中匹配到的第一個字符串
语法: @REPLACE(COLSTR,SOURCESTRING,TARGETSTRING) @REPLACE(COLSTR,s1,t1,s2,t2,s3,t3,....)
replaceall
- @REPLACEALL ##替換字符串中匹配到所有的字符串
语法: @REPLACE(COLSTR,SOURCESTRING,TARGETSTRING) @REPLACE(COLSTR,s1,t1,s2,t2,s3,t3,....)
randomstring
- @RANDOMSTRING ##获取随机字符串 @RANDOMSTRING(5) 获取5位长度的随机字符串
示例:语法:RANDOM([length]) length:可选项,指定生成随机字符串的长度,最大长度8000。如果不指定长度,则生成一个长度20以内的随机字符串。
@RANDOMSTRING() result[10]: '6KA1kJR5Cp' @RANDOMSTRING(-1) result[1]: '' @RANDOMSTRING(0) result[1]: '' @RANDOMSTRING(20) result[20]: 'I0bSY2EEf3bm06ZKTTow'
stringreverse
- @STRINGREVERSE #内容倒序函数
示例:@STRINGREVERSE('123456789') result[9]: '987654321'
strsubpoint
- @STRSUBPOINT #字符串指定位置替换 @STRSUBPOINT(colstr,3,5,targetstr)
示例:语法:STRSUBPOINT(string,start, end, targetstr) string:表示源字符串。 start:替换开始位置,最小为1,即从头开始替换,如果start小于1的话,自动从1开始。 end: 替换结束位置,如果小于start,则不进行替换。 targetstr:要替换的字符串。
@STRSUBPOINT('abcdefg',2,6,'tyt') result[5]: 'atytg' @STRSUBPOINT('abcdefg',3,4,'tyt') result[8]: 'abtytefg' @STRSUBPOINT('abcdefg',3,3,'tyt') result[9]: 'abtytdefg' @STRSUBPOINT('abcdefg',6,10,'tyt') result[8]: 'abcdetyt' @STRSUBPOINT('abcdefg',3,5,'') result[4]: 'abfg' @STRSUBPOINT('abcdefg',3,1,'tyt') result[7]: 'abcdefg' @STRSUBPOINT('abcdefg',-1,2,'tyt') result[8]: 'tytcdefg' @STRSUBPOINT('abcdefg',3,-1,'tyt') result[7]: 'abcdefg' @STRSUBPOINT('',1,2,'sd') result[1]: ''
数字函数
number
numbin
numhex
compute
- @COMPUTE ##返回计算的值 @COMPUTE(12+(5-4)/2) 支持+-/%五种通用计算方式,支持括号、函数嵌套,支持整数,浮点数等
示例:@COMPUTE(10 +20*(-2-4)%(3--6)/-2) result[21]: 16.666666666666667851 @COMPUTE(1+ @ABS(@COMPUTE(10 +20*-2-4%3--6/-2)) + 2) result[21]: 37.333333333333328596
random
- @RANDOM ##获取随机数 @RANDOM(3) 3为长度的随机数
示例:语法:RANDOM([length]) length:可选项,指定生成随机数的长度,最大长度20。
@RANDOM() result[10]: 1799709735 @RANDOM(-1) result[1]: 0 @RANDOM(0) result[1]: 0 @RANDOM(5) result[5]: 17997 @RANDOM(20) result[20]: 17997097357313528046 @RANDOM(25) result[20]: 17997097357313528046
abs
- @ABS(X) X的绝对值 ABS(-3)=3
ceil
- @CEIL(X) 大于或等于X的最小整数值
示例:@CEIL(1.2) result[1]: 2 @CEIL(10) result[2]: 10 @CEIL(-1.2) result[2]: -1 @CEIL(-0.0) result[1]: 0 @CEIL(0) result[1]: 0
floor
- @FLOOR(X) 小于或等于X的最大值
示例:@FLOOR(1.2) result[1]: 1 @FLOOR(10) result[2]: 10 @FLOOR(-1.2) result[2]: -2 @FLOOR(-0.0) result[1]: 0 @FLOOR(0) result[1]: 0
mod
- @MOD(X,Y) X除以Y的余数 MOD(8,3)=2
round
- @ROUND(X[,Y]) X在第Y位四舍五入 ROUND(3.456,2)=3.46
示例:语法: X 要处理的数 Y 可选项,指保留几位小数,默认为0。Y可以是负数,这时是指定小数点左边的Y位整数位为0,同时小数位均为0。
@ROUND(0.0) result[1]: 0 @ROUND(-0.0) result[1]: 0 @ROUND(1.435) result[1]: 1 @ROUND(1.567) result[1]: 2 @ROUND(1.435,0) result[1]: 1 @ROUND(1.435,1) result[3]: 1.4 @ROUND(1.435,2) result[4]: 1.44 @ROUND(-1.435,3) result[6]: -1.435 @ROUND(1.435,5) result[5]: 1.435 @ROUND(1.495,2) result[4]: 1.50 @ROUND(1.995,2) result[4]: 2.00 @ROUND(-9.995,2) result[6]: -10.00 @ROUND(20.2) result[2]: 20 @ROUND(-9.995,-1) result[3]: -10 @ROUND(111.995,-1) result[3]: 110 @ROUND(-141.995,-2) result[4]: -100 @ROUND(-451.995,-2) result[4]: -500 @ROUND(-451.995,-3) result[1]: 0 @ROUND(-551.995,-3) result[5]: -1000 @ROUND(-951.995,-4) result[1]: 0
trunc
power
- @POWER(X,Y) X的Y次幂 POWER(2,3)=8
示例:@POWER(0,0) result[1]: 1 @POWER(0,1) result[1]: 0 @POWER(1.654,0) result[1]: 1 @POWER(4,2) result[2]: 16 @POWER(4,-2) result[6]: 0.0625 @POWER(-4.678,2) result[21]: 21.883683999999998804 @SQRT(X) X的平方根 SQRT(4)=2 @LOG(X,Y) X为底Y的对数 LOG(2,4)=2 @SIN(X) X的正弦值 SIN(1)=0.84147098480789650488 @COS(X) X的余弦值 COS(1)=0.54030230586814 @ASIN(X) X的反正弦 ASIN(1)=1.570796326794896558 @ACOS(X) X的反余弦 ACOS(1)=0
时间函数
date
@DATE ##返回系统日期 @DATE()
示例:
@DATE() result[10]: ‘2020-03-06’
datenow
datediff
- @DATEDIFF ##返回时间比对结果 @DATEDIFF(FIRST,SECOND,FORMAT,UNID)
示例:第一个时间,减去第二个时间,采用FORMAT格式,返回单位为D/H/M/S 天/小时/分/秒 语法:RANDOM([length]) FIRST: 第一个时间 SECOND:第二个时间 FORMAT:FIRST和SECOND采用的时间格式,如果设置为'',默认采用'yyyy-MM-dd HH:mi:ss'的格式 UNID: 返回值的单位, D/H/M/S 天/小时/分/秒
@DATEDIFF('2020-03-07 08:58:35','2020-03-06 08:58:35','yyyy-MM-dd HH:mi:ss','d') result[1]: 1 @DATEDIFF('2020-03-07 08:58:35','2020-03-06 08:58:35','yyyy-MM-dd HH:mi:ss','h') result[2]: 24 @DATEDIFF('2020-03-07 08:58:35','2020-03-06 08:58:35','yyyy-MM-dd HH:mi:ss','m') result[4]: 1440 @DATEDIFF('2020-03-07 08:58:35','2020-03-06 08:58:35','yyyy-MM-dd HH:mi:ss','s') result[5]: 86400 @DATEDIFF('2020/03/07 08:58:35','2020/03/06 08:58:35','yyyy-MM-dd HH:mi:ss','d') result[1]: 1 @DATEDIFF('20/3/7 08:58:35','20/3/8 07:58:35','yy/m/d HH:mm:ss','d') result[1]: 0 @DATEDIFF('20/3/7 08:58:35','20/3/8 07:58:35','yy/m/d HH:mm:ss','m') result[5]: -1380 @DATEDIFF('20/3/7 08:58:35','20/3/8 09:58:35','yy/m/d HH:mm:ss','d') result[2]: -1 @DATEDIFF('2020-03-07 08:58:35','2020-03-08 08:58:35','','d') result[2]: -1
dateadd
@DATEADD ##时间加减 @DATEADD(SOURCE_TIME,INTERVAL)
源时间增加加时间间隔,返回新时间,返回格式为’yyyy-MM-dd HH:mi:ss’
语法:
SOURCE_TIME: 源时间,采用’yyyy-MM-dd HH:mi:ss’的格式
INTERVAL: 时间间隔,支持间隔类型DAY、HOUR、MINUTE、SECOND,间隔可为负数示例:
@DATEADD('2022-01-31 23:58:35', 'INTERVAL 1 HOUR') result[19]: '2022-02-01 00:58:35' @DATEADD('2022-01-31 00:58:35', 'INTERVAL -1 HOUR') result[19]: '2022-01-30 23:58:35' @DATEADD('2022-03-31 08:59:59', 'INTERVAL 1 MINUTE') result[19]: '2022-03-31 09:00:59' @DATEADD('2022-03-31 08:58:59', 'INTERVAL 12 SECOND') result[19]: '2022-03-31 08:59:11' @DATEADD('2023-02-16 11:08:02', 'INTERVAL 365 DAY') result[19]: '2024-02-16 11:08:02'
DATEFORMAT
注:zcbus-8.1-16-20231220.tar.gz版本支持
@DATEFORMAT(SOURCE_TIME,SOURCE_FORMAT,TARGET_FORMAT)
- 时间格式转换函数,返回转换结果字符串
对源时间进行格式转换,从SOURCE_FORMAT格式转换为TARGET_FORMAT格式
语法:
SOURCE_TIME: 源时间
SOURCE_FORMAT:源时间的时间格式,如果设置为’’,默认是’yyyy-MM-dd HH:mi:ss’的格式
TARGET_FORMAT:转换后时间的时间格式,如果设置为’’,默认是’yyyy-MM-dd HH:mi:ss’的格式
示例:@DATEFORMAT('2020-03-07 08:58:35','yyyy-MM-dd HH:mi:ss','yyyy-MM-dd') result[10]: '2020-03-07' @DATEFORMAT('2020-03-07 08:58:35','','HH:mi:ss') result[8]: '08:58:35' @DATEFORMAT('2020-03-07 08:58:35','','yyyy/MM/dd HH:mi:ss') result[19]: '2020/03/07 08:58:35'
二进制函数处理
hextoraw
- @HEXTORAW(X) 16进制字符串转换成二进制数据,同oracle的HEXTORAW
rawtohex
- @RAWTOHEX(X) 二进制数据转换成16进制字符串,同oracle的RAWTOHEX
例如etl.ini里可以写PASS(SQLTYPE=(ON=INSERT,ON=DELETE,ON=UPDATEAFTER),CONDITION=(id = (@HEXTORAW('31'))))
HASH函数处理
hash
- @HASH(X) 将字符串计算成无符号的的int数值 HASH(‘abcd’)=219759674
PASS(SQLTYPE=(ON=INSERT,ON=DELETE,ON=UPDATEAFTER),CONDITION=(MOD(HASH('abcd'),5)=0))
SM3HASH
- @SM3HASH(X) 将字符串sm3哈希算法进行计算,输出长度是64的16进制字符串
@SM3HASH(‘34022219641010633X’) result[64]: ‘1d091a0fe6d74001b7375435204c662bafbb16372cb6b55db90c973085b6a0a4’示例: @SM3HASH('abc') result[64]: '66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0' @SM3HASH('340421199806064664') result[64]: '16d20f53c878ff335aa96c7367bd255ce4063a6cc8be53130185b9d88c4568b5'
特殊函数处理
decode
- @DECODE 函数 类似Oracle数据库中decode函数,可以替代switch case函数
【函数格式】:
【函数说明】:@DECODE ( expression, condition_01, result_01, condition_02, result_02, ......, condition_n, result_n, result_default)
若表达式expression值与condition_01值匹配,则返回result_01,若不匹配,则继续判断;
若表达式expression值与condition_02值匹配,则返回result_02,若不匹配,则继续判断;
以此类推,若表达式expression值condition_n值匹配,则返回result_n,若不匹配,则继续判断;
若表达式expression值与以上所有的condition都不匹配,则返回默认值result_default,若省略result_default参数,则返回null。
【函数解释】:其实,该函数的作用可以用以下一段if else条件语句进行更加形象地解释:
if expression=condition_01 then
return result_01;
else
if expression=condition_02 then
return result_02;
else
......
if expression=condition_n then
return result_n;
else
return result_default;
end if;
end if;
end if;
【使用形式】:
因为该函数的匹配条件condition可以设置一个或多个,默认值result_default也可以省略,因此该函数具体的使用形式有以下几种:
@decode (expression,condition_01,result_01)
释义:若expression与condition_01匹配,则返回result_01,否则返回null。
@decode (expression,condition_01,result_01,result_default)
释义:若expression与condition_01匹配,则返回result_01,否则返回result_default。
@decode (expression,condition_01,result_01,condition_02,result_02)
释义:若expression与condition_01匹配,则返回result_01,若不匹配,则继续判断,若expression与condition_02匹配,则返回result_02,否则返回null。
@decode (expression,condition_01,result_01,condition_02,result_02,result_default)
释义:若expression与condition_01匹配,则返回result_01,若不匹配,则继续判断,若expression与condition_02匹配,则返回result_02,否则返回result_default。
@decode(expression,condition_01,result_01,condition_02,result_02,......,condition_n,result_n)
释义:若expression与condition_01匹配,则返回result_01,若不匹配,则继续判断,若expression与condition_02匹配,则返回result_02,若不匹配,则继续判断,直到expression与condition_n匹配为止,返回result_n,否则返回null。
@decode(expression,condition_01,result_01,condition_02,result_02,......,condition_n,result_n,result_default)
释义:若expression与condition_01匹配,则返回result_01,若不匹配,则继续判断,若expression与condition_02匹配,则返回result_02,若不匹配,则继续判断,直到expression与condition_n匹配为止,返回result_n,否则返回result_default。
ifnull
- @IFNULL ##类似mysql中的IFNULL函数
文档更新时间: 2024-04-07 18:03 作者:阿力