离线数据集成 附录:支持的内置函数 函数名 中文名 函数规范 函数说明 ASCII 获取ASCII编码 ASCII('Hi') 返回字符串中第一个字符的ASCII值。此方法返回一个整数。 BITLENGTH 位长度 BITLENGTH(NAME) 返回二进制字符串中的位数。该方法返回一个长整型 CHARLENGTH 字符长度 CHARLENGTH(NAME) 这个方法返回一个字符串中字符的数量,返回类型为 long。 LENGTH 文本长度 LENGTH(NAME) 这个方法返回一个字符串中字符的数量,返回类型为 long。 OCTETLENGTH 二进制字符长度 OCTETLENGTH(NAME) 返回二进制字符串中字节的数量。此方法返回一个 long 类型的值。 CHAR ASCII转字符 CHAR(65) 返回表示ASCII值的字符。该方法返回一个字符串。 CHR ASCII编码转字符 CHR(65) 返回表示ASCII值的字符。该方法返回一个字符串。 CONCAT 连接字符串 CONCAT(NAME, '') 组合字符串。与运算符 不同,NULL 参数会被忽略,不会导致结果变为 NULL。如果所有参数都是 NULL,则结果是一个空字符串。该方法返回一个字符串。 CONCATWS 拼接字符串 CONCATWS(',', NAME, '') 使用分隔符组合字符串。如果分隔符为 NULL,则会被视为空字符串。其他 NULL 参数会被忽略。剩余的 非NULL 参数(如果有)将用指定的分隔符连接起来。如果没有剩余参数,则结果是一个空字符串。该方法返回一个字符串。 HEXTORAW 十六进制转原始字符串 HEXTORAW(DATA) 将字符串的十六进制表示转换为字符串。每个字符串字符使用4个十六进制字符。 RAWTOHEX 原始字符串转十六进制 RAWTOHEX(DATA) 将字符串或字节转换为十六进制表示。每个字符串字符使用4个十六进制字符。该方法返回一个字符串。 INSERT 指定位置插入字符串 INSERT(NAME, 1, 1, ' ') 在原始字符串的指定起始位置插入额外的字符串。长度参数指定在原始字符串的起始位置删除的字符数。该方法返回一个字符串。 LOWER 转小写 LOWER(NAME) 将字符串转换为小写形式。 LCASE 转小写(同LOWER) LCASE(NAME) 将字符串转换为小写形式。 UPPER 转大写 UPPER(NAME) 将字符串转换为大写形式。 UCASE 转大写(同UPPER) UCASE(NAME) 将字符串转换为大写形式。 LEFT 左截取 LEFT(NAME, 3) 返回最左边的一定数量的字符。 RIGHT 右截取 RIGHT(NAME, 3) 返回最右边的一定数量的字符。 LOCATE 查找字符位置 LOCATE('.', NAME) 返回字符串中搜索字符串的位置。如果使用了起始位置参数,则忽略它之前的字符。如果位置参数是负数,则返回最右边的位置。如果未找到搜索字符串,则返回 0。请注意,即使参数不区分大小写,此函数也区分大小写。 INSTR 查询字符位置 INSTR(NAME,'.') 返回字符串中搜索字符串的位置。如果使用了起始位置参数,则忽略它之前的字符。如果位置参数是负数,则返回最右边的位置。如果未找到搜索字符串,则返回 0。请注意,即使参数不区分大小写,此函数也区分大小写。 POSITION 寻找字符位置 POSITION(NAME,'.') 返回字符串中搜索字符串的位置。如果使用了起始位置参数,则忽略它之前的字符。如果位置参数是负数,则返回最右边的位置。如果未找到搜索字符串,则返回 0。请注意,即使参数不区分大小写,此函数也区分大小写。 LPAD 左限制填充 LPAD(AMOUNT, 10, '') 将字符串左侧填充到指定的长度。如果长度比字符串短,则字符串将在末尾被截断。如果未设置填充字符串,则使用空格填充。 RPAD 右限制填充 RPAD(TEXT, 10, '') 将字符串右侧填充到指定的长度。如果长度比字符串短,则字符串将被截断。如果未设置填充字符串,则使用空格填充。 LTRIM 去除左空格 LTRIM(NAME) 移除字符串中所有前导空格或其他指定的字符。此函数已被弃用,请使用 TRIM 替代。 RTRIM 去除右空格 RTRIM(NAME) 移除字符串中所有尾随空格或其他指定的字符。此函数已被弃用,请使用 TRIM 替代。 TRIM 去除空格 TRIM(NAME) 移除字符串中所有前后导空格或其他指定的字符。 REGEXPREPLACE 正则替换字符串 REGEXPREPLACE('Hello World', ' +', ' ') 替换与正则表达式匹配的每个子字符串。详情请参阅 Java String.replaceAll() 方法。如果任何参数为 null(除了可选的 flagsString 参数),则结果为 null。 REGEXPLIKE 正则匹配字符串 REGEXPLIKE('Hello World', '[AZ ]', 'i') 将字符串与正则表达式匹配。详情请参阅 Java Matcher.find() 方法。如果任何参数为 null(除了可选的 flagsString 参数),则结果为 null。 REGEXPSUBSTR 正则子串 REGEXPSUBSTR('20201001', 'd{4}') 将字符串与正则表达式匹配,并返回匹配的子字符串。 REPEAT 重复字符串 REPEAT(NAME, 10) 返回重复字符串 REPLACE 替换字符串 REPLACE(NAME, ' ') 在文本中替换所有出现的搜索字符串为另一个字符串。如果没有指定替换字符串,则从原始字符串中移除搜索字符串。如果任何参数为 null,则结果为 null。 SOUNDEX 声音编码转换 SOUNDEX(NAME) 表示字符串发音。此方法返回一个字符串,如果参数为 null,则返回 null。 SPACE 空格字符串 SPACE(80) 返回由一定数量的空格组成的字符串。 SUBSTRING 截取子串 SUBSTRING('[Hello]', 2) 返回从指定位置开始的字符串的子串。 SUBSTR 截取字符串 SUBSTR('[Hello]', 2) 返回从指定位置开始的字符串的子串。 TOCHAR 转换为指定格式化字符串 TOCHAR(SYSTIME, 'yyyyMMdd HH:mm:ss') Oracle 兼容的 TOCHAR 函数可用于格式化时间戳、数字或文本。 TRANSLATE 转换替换 TRANSLATE('Hello world', 'eo', 'EO') Oracle 兼容的 TRANSLATE 函数用于将字符串中的一系列字符替换为另一组字符。 ABS 绝对值 ABS(I) 返回指定值的绝对值。返回的值与参数的数据类型相同。注意,TINYINT、SMALLINT、INT 和 BIGINT 数据类型无法表示它们的最小负值的绝对值,这可能导致异常。 ACOS 反余弦 ACOS(D) 计算反余弦值。该方法返回一个双精度浮点数。 ASIN 反正弦 ASIN(D) 计算反正弦值。该方法返回一个双精度浮点数。 ATAN 反正切 ATAN(D) 计算反正切值。该方法返回一个双精度浮点数。 COS 余弦 COS(ANGLE) 计算三角余弦值。该方法返回一个双精度浮点数。 COSH 双曲余弦 COSH(X) 计算双曲余弦值。该方法返回一个双精度浮点数。 COT 余切 COT(ANGLE) 计算三角余切值(1/TAN(角度))。该方法返回一个双精度浮点数。 SIN 正弦 SIN(ANGLE) 计算三角正弦值。该方法返回一个双精度浮点数。 SINH 双曲正弦 SINH(ANGLE) 计算双曲正弦值。该方法返回一个双精度浮点数。 TAN 正切 TAN(ANGLE) 计算三角正切值。该方法返回一个双精度浮点数。 TANH 双曲正切 TANH(X) 计算双曲正切值。该方法返回一个双精度浮点数。 MOD 模运算 MOD(A, B) 取模运算表达式。结果与除数的类型相同。结果与被除数的符号相同,或者等于 0。 CEIL 向上取整 CEIL(A) 返回大于或等于参数的最小整数值。 CEILING 向上取整函数 CEILING(A) 返回大于或等于参数的最小整数值。 EXP 指数 EXP(A) 计算参数的指数值,该方法返回一个双精度浮点数。 FLOOR 地板函数 FLOOR(A) 返回小于或等于参数的最大整数值。 LN 自然对数 LN(A) 计算自然对数(以 e 为底)。参数必须是一个正数值。 LOG 对数 LOG(2, A) 计算以指定底数的对数。底数和参数必须是正数值。 LOG10 以10为底的对数 LOG10(A) 计算以 10 为底的对数。参数必须是一个正数值。 RADIANS 弧度 RADIANS(A) 将角度转换为弧度。 SQRT 平方根 SQRT(A) 计算参数的平方根,返回一个双精度浮点数。 PI 圆周率 PI() 返回圆周率常数 PI。 POWER 幂运算 POWER(A, B) 计算底数的幂。返回一个双精度浮点数。 RAND 随机数 RAND() 生成一个介于 0 和 1 之间的伪随机数。如果带有参数调用,则将会给该会话的随机数生成器设定种子。 RANDOM 随机数字 RANDOM() 生成一个介于 0 和 1 之间的伪随机数。如果带有参数调用,则将会给该会话的随机数生成器设定种子。 ROUND 四舍五入 ROUND(N, 2) 将数值四舍五入到指定的小数位数,只支持Double类型。 SIGN 数值符号 SIGN(N) 返回数值的符号。如果值小于 0,则返回 1;如果值为 0,则返回 0;如果值大于 0,则返回 1。 TRUNC 截断小数 TRUNC(N, 2) 将数值截断到指定的小数位数。 TRUNCATE 截断小数部分 TRUNCATE(N, 2) 将数值截断到指定的小数位数。 CURRENTDATE 当前日期 CURRENTDATE() 返回当前日期。这些函数在事务(默认)或命令内部返回相同的值,具体取决于数据库模式。 CURRENTTIME 当前时间 CURRENTTIME() 返回带有系统时区的当前时间。实际可用的最大精度取决于操作系统和 JVM,可以是 3(毫秒)或更高。在 Java 9 之前不支持更高的精度。 CURRENTTIMESTAMP 当前时间戳 CURRENTTIMESTAMP() 返回带有系统时区的当前时间戳。实际可用的最大精度取决于操作系统和 JVM,可以是 3(毫秒)或更高。在 Java 9 之前不支持更高的精度。 NOW 当前系统时间 NOW() 返回带有系统时区的当前时间戳。实际可用的最大精度取决于操作系统和 JVM,可以是 3(毫秒)或更高。在 Java 9 之前不支持更高的精度。 DATEADD 日期加法 DATEADD(CREATED, 1, 'MONTH') 将单位添加到日期时间值中。datetimeFieldString 表示单位。使用负值来减去单位。当操作毫秒、微秒或纳秒时,addIntLong 可能是一个 long 值,否则其范围被限制为 int。 TIMESTAMPADD 时间戳加法 TIMESTAMPADD(CREATED, 1, 'MONTH') 将单位添加到日期时间值中。datetimeFieldString 表示单位。使用负值来减去单位。当操作毫秒、微秒或纳秒时,addIntLong 可能是一个 long 值,否则其范围被限制为 int。 DATEDIFF 日期差 DATEDIFF(T1.CREATED, T2.CREATED, 'MONTH') 返回两个日期时间值之间跨越的单位边界数。此方法返回一个 long 值。datetimeField 表示单位。 DATETRUNC 日期截断 DATETRUNC(CREATED, 'DAY') 将指定的日期时间值截断到指定的字段。 DAYNAME 星期名称 DAYNAME(CREATED) 返回星期几的名称(英文)。 DAYOFMONTH 月份中的天 DAYOFMONTH(CREATED) 返回月份中的日期(131)。 DAYOFWEEK 周中的天 DAYOFWEEK(CREATED) 返回星期几的数值(17)(星期一至星期日),根据本地化设置。 DAYOFYEAR 年份中的天 DAYOFYEAR(CREATED) 返回一年中的日期(1366)。 EXTRACT 提取时间 EXTRACT(SECOND FROM CURRENTTIMESTAMP) 从日期/时间值中返回特定时间单位的值。该方法对于 EPOCH 字段返回一个数值,对于其他字段返回一个整数。 FORMATDATETIME 格式化日期时间 FORMATDATETIME(CREATED, 'yyyyMMdd HH:mm:ss') 将日期、时间或时间戳格式化为字符串。最重要的格式字符包括:y(年)、M(月)、d(日)、H(时)、m(分)、s(秒)。 HOUR 小时 HOUR(CREATED) 从日期/时间值中返回小时(023)。 MINUTE 分钟 MINUTE(CREATED) 从日期/时间值中返回分钟(059)。该函数已经被弃用,请使用 EXTRACT 替代。 MONTH 月份 MONTH(CREATED) 从日期/时间值中返回月份(112)。该函数已经被弃用,请使用 EXTRACT 替代。 MONTHNAME 月份名称 MONTHNAME(CREATED) 返回月份的名称(英文)。 PARSEDATETIME 解析日期时间 PARSEDATETIME('20210408 13:34:45','yyyyMMdd HH:mm:ss') 解析一个字符串并返回一个 TIMESTAMP WITH TIME ZONE 值。 TODATE 转换为日期 TODATE('20210408 13:34:45','yyyyMMdd HH:mm:ss') 解析一个字符串并返回一个 TIMESTAMP WITH TIME ZONE 值。 QUARTER 季度 QUARTER(CREATED) 从日期/时间值中返回季度(14)。 SECOND 秒 SECOND(CREATED) 从日期/时间值中返回秒数(059)。该函数已经被弃用,请使用 EXTRACT 替代。 WEEK 周 WEEK(CREATED) 返回日期/时间值中的周数(153)。该函数使用当前系统的区域设置。 YEAR 年 YEAR(CREATED) 返回日期/时间值中的年份。 FROMUNIXTIME 时间戳转时间 CALL FROMUNIXTIME(1672502400, 'yyyyMMdd HH:mm:ss') 将从 UNIX 纪元(19700101 00:00:00 UTC)开始的秒数转换为表示该时刻时间戳的字符串。 CAST 强转换类型 CAST(NAME AS INT) 将一个值强转为另一个数据类型,如不支持会报错。支持的数据类型有:STRING VARCHAR,INT INTEGER,LONG BIGINT,BYTE,FLOAT,DOUBLE,DECIMAL(p,s),TIMESTAMP,DATE,TIME。 COALESCE 返回第一个非空值 COALESCE(A, B, C) 返回第一个非空值。 IFNULL 返回两者的第一个非空值 IFNULL(A, B) 返回第一个非空值。 NULLIF 相等则为空 NULLIF(A, B) 如果 'a' 等于 'b',则返回 NULL,否则返回 'a'。 MASKMIDDLE 掩码屏蔽 MASKMIDDLE(fieldName, 1, 4, '') 对fieldName一定长度内进行屏蔽 ENCRYPT 加密 ENCRYPT(NAME, 'AES' ) 将输入字段进行加密,字段名称,字段加密方式支支持ASE DECRYPT 解密 DECRYPT(NAME, 'AES' ) 将输入字段进行解密,字段名称,,字段解密方式支支持ASE