数据加工函数说明

字符串函数

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

  • @CONCAT ##链接字符串,支持多个参数,比如@CONCAT(‘1’,’2’,’3’), 最少2个参数,最多16个参数

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

  • @STRICMP ##使用方法同@STRCMP,但是比较字符串的时候,忽略大小写

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

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

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

  • @TRUNC(X[,Y]) X在第Y位截断 TRUNC(3.456,2)=3.45
          语法同@ROUND,但是不进行四舍五入,直接舍掉。

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(24)=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('abc')                 result[64]: '66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0'
          @SM3HASH('340421199806064664')                  result[64]: '16d20f53c878ff335aa96c7367bd255ce4063a6cc8be53130185b9d88c4568b5'
    @SM3HASH(‘34022219641010633X’) result[64]: ‘1d091a0fe6d74001b7375435204c662bafbb16372cb6b55db90c973085b6a0a4’

特殊函数处理

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   作者:阿力