DQL元数据层会把标准函数按照下面的对照表,翻译成相应的数据库函数,对于非标准函数(即不认识的函数)或者关键词(如TOP/BOTTOM等),DQL元数据层会原样保留。
字符串函数
标准函数 |
含义 |
oracle |
sql server |
db2 |
impala |
LOWER(str) |
转成小写 |
|
|
|
LOWER(str) |
UPPER(str) |
转成大写 |
|
|
|
UPPER(str) |
LTRIM(str) |
删除前导空白 |
|
|
|
LTRIM(str) |
RTRIM(str) |
删除后缀空白 |
|
|
|
RTRIM(str) |
TRIM(str) |
删除两端空白 |
TRIM(str) |
LTRIM(RTRIM(str)) |
LTRIM(RTRIM(str)) |
TRIM(str) |
SUBSTR(str,start, len) |
子串 |
SUBSTR(str,start, len) |
SUBSTRING(str,start, len) len(str)-start+1) |
SUBSTR(str,start, len) SUBSTR(str,start) |
SUBSTR(str,start, len) SUBSTR(str,start) |
LEN(str) |
串长 |
LENGTH(str) |
LEN(str) |
LENGTH(str) |
LENGTH(str) |
INDEXOF(sub,str [,start]) |
子串的位置 |
INSTR(str,sub [,start]) |
CHARINDEX(sub,str [,start]) |
LOCATE(sub,str [,start]) |
INDEXOF(sub,str [,start]) |
LEFT(str,len) |
str中最左边len个字符 |
SUBSTR(str,1,len) |
LEFT(str,len) |
LEFT(str,len) |
STRLEFT(str,len) |
RIGHT(str,len) |
str中最右边len个字符 |
CASE WHEN len=0 THEN '' WHEN LENGTH(str)>len THEN SUBSTR(str,-len) ELSE str END |
RIGHT(str,len) |
RIGHT(str,len) |
STRRIGHT(str,len) |
CONCAT(str1,str2) |
连接2个字符串 |
CONCAT(str1,str2) |
str1+str2 |
CONCAT(str1,str2) |
CONCAT(str1,str2) |
CONCAT(str1,str2, str3…) |
连接多个字符串 |
str1||str2||str3… |
str1+str2+str3+… |
str1+str2+str3+… |
str1||str2||str3… |
REPLACE(str,sub, rplc) |
将str中的sub替换成rplc |
|
|
|
REPLACE(str,sub, rplc) |
日期时间函数
标准函数 |
含义 |
oracle |
sql server |
db2 |
impala |
YEAR(d) |
取年 |
EXTRACT(YEAR FROM d) |
YEAR(d) |
YEAR(d) |
YEAR(d) |
MONTH(d) |
取月 |
EXTRACT(MONTH FROM d) |
MONTH(d) |
MONTH(d) |
MONTH(d) |
DAY(d) |
取天 |
EXTRACT(DAY FROM d) |
DAY(d) |
DAY(d) |
DAY(d) |
HOUR(d) |
取小时 |
EXTRACT(HOUR FROM d) |
DATEPART(HH, d) |
HOUR(d) |
HOUR(d) |
MINUTE(d) |
取分钟 |
EXTRACT(MINUTE FROM d) |
DATEPART(MI,d) |
MINUTE(d) |
MINUTE(d) |
SECOND(d) |
取秒 |
EXTRACT(SECOND FROM d) |
DATEPART(SS,d) |
SECOND(d) |
SECOND(d) |
QUARTER(d) |
取季度 |
FLOOR((EXTRACT(MONTH FROM d)+2)/3) |
DATEPART(QQ,d) |
QUARTER(d) |
QUARTER(d) |
TODAY() |
今天 |
SYSDATE |
GETDATE() (CHAR, GETDATE(),101),101) //去掉时分秒 |
CURRENT DATE |
TRUNC(NOW(),'dd') |
NOW() |
当前时间 |
SYSTIMESTAMP |
GETDATE()/CURRENT_TIMESTAMP |
CURRENT TIMESTAMP |
NOW() |
ADDYEARS(d,n) |
增加年数 |
d+NUMTOYMINTERVAL (n,'YEAR') |
DATEADD(YY,n,d) |
d+n YEARS |
YEARS_ADD(d,n) |
ADDMONTHS(d, n) |
增加月数 |
d+NUMTOYMINTERVAL (n,'MONTH') |
DATEADD(MM,n,d) |
d+n MONTHS |
MONTHS_ADD(d,n) |
ADDDAYS(d, n) |
增加天数 |
d+NUMTODSINTERVAL (n,'DAY') |
DATEADD(DD,n,d) |
d+n DAYS |
DAYS_ADD(d,n) |
ADDHOURS(d, n) |
增加小时数 |
d+NUMTODSINTERVAL (n,'HOUR') |
DATEADD(HH,n,d) |
d+n HOURS |
HOURS_ADD(d,n) |
ADDMINUTES(d,n) |
增加分钟数 |
d+NUMTODSINTERVAL (n,'MINUTE') |
DATEADD(MI,n,d) |
d+n MINUTES |
YEARS_ADD(d,n) |
ADDSECONDS(d,n) |
增加秒数 |
d+NUMTODSINTERVAL (n,'SECOND') |
DATEADD(SS,n,d) |
d+n SECONDS |
YEARS_ADD(d,n) |
DAYOFYEAR(d) |
当年中第几天 |
TO_NUMBER (TO_CHAR(d,'DDD')) |
DATEPART(DY,d) |
DAYOFYEAR(d) |
DAYOFYEAR(d) |
WEEKOFYEAR(d) |
当年中第几星期 |
TO_NUMBER (TO_CHAR(d,'WW')) |
DATEPART(WW,d) |
WEEK(d) |
WEEKOFYEAR(d) |
数值函数
标准函数 |
含义 |
oracle |
sql server |
db2 |
impala |
ABS(x) |
求绝对值 |
|
|
|
ABS(x) |
ACOS(x) |
求反余弦 |
|
|
|
ACOS(x) |
ASIN(x) |
求反正弦 |
|
|
|
ASIN(x) |
ATAN(x) |
求反正切 |
|
|
|
ATAN(x) |
ATAN2(x,y) |
求反正切 |
ATAN2(x,y) |
ATN2(x,y) |
ATAN2(x,y) |
ATAN2(x,y) |
CEIL(x) |
求大于等于x的最小整数 |
CEIL(x) |
CEILING(x) |
CEIL(x)/CEILING(x) |
CEIL(x) |
COS(x) |
求余弦 |
|
|
|
COS(x) |
EXP(x) |
求e的x次幂 |
|
|
|
EXP(x) |
FLOOR(x) |
求小于等于x的最大整数 |
|
|
|
FLOOR(x) |
LN(x) |
求自然对数 |
LN(x) |
LOG(x) |
LN(x)/LOG(x) |
LN(x) |
LOG10(x) |
求以10为底的对数 |
LOG(10,x) |
LOG10(x) |
LOG10(x) |
LOG10(x) |
MOD(x,m) |
x模m |
MOD(x,m) |
x%m |
MOD(x,m) |
MOD(x,m) |
POWER(x,y) |
x的y次幂 |
|
|
|
POWER(x,y) |
ROUND(x,n) |
四舍五入 |
|
|
|
ROUND(x,n) |
SIGN(x) |
求符号 |
|
|
|
SIGN(x) |
SIN(x) |
求正弦 |
|
|
|
SIN(x) |
SQRT(x) |
平方根 |
|
|
|
SQRT(x) |
TAN(x) |
正切 |
|
|
|
TAN(x) |
TRUNC(x,n) |
截断 |
TRUNC(x,n) |
CONVERT(BIGINT, x*POWER(10,n)) /POWER(10.0,n) 从后支持TRUNC(x,n)? |
TRUNC(x,n) |
CAST(x*POWER(10,n) AS BIGINT)/POWER(10.0,n) |
RAND(seed) |
随机数 |
DBMS_RANDOM. VALUE(0, seed) //返回0-seed之间的数 |
RAND(seed)//返回0-1之间的数 |
RAND(seed)//返回0-1之间的数 |
RAND(seed) |
转换函数
标准函数 |
含义 |
oracle |
sql server |
db2 |
impala |
ASCII(str) |
串中最左边字符的ASCII码 |
|
|
|
ASCII(str) |
CHR(n) |
ascii值n转换成一个字符 |
CHR(n) |
CHAR(n) |
CHR(n) |
CHR(n) |
INT(x) |
字符串或数值转成整数 |
CAST(x AS INT) |
CAST(x AS INT) |
INT(x) |
CAST(x as INT) |
DECIMAL(x,len, scale) |
字符串或数值转成数值 |
CAST(x AS DECIMAL(len,scale)) |
CAST(x AS DECIMAL(len,scale)) |
DECIMAL(x,len,scale) |
CAST(x as DECIMAL (len,scale)) |
TIMESTAMP(str) |
yyyy-mm-dd hh24:mi:ss格式串转换成日期 |
TO_DATE(str,'YYYY-MM-DD HH24:MI:SS') |
CONVERT(DATETIME, str,120) |
TO_DATE(str,'YYYY-MM-DD HH24:MI:SS') |
CAST(str as TIMESTAMP) |
NUMTOCHAR(d) |
数值转成字符串 |
TO_CHAR(d) |
CAST(d AS VARCHAR) |
CHAR(d) |
CAST(str as STRING) |
DATETOCHAR(date) |
将日期转化成yyyy-mm-dd hh24:mi:ss格式串 |
TO_CHAR(date,'YYYY-MM-DD HH:MI:SS') |
CONVERT(CHAR,date,120) |
TO_CHAR(date,'YYYY-MM-DD HH:MI:SS') |
CAST(data) as STRING |
CAST(x, y) |
将x转化为数据类型y(注:y不能使用?) |
CAST(x as y) |
CAST(x as y) |
CAST(x as y) |
CAST(x as y ) |
聚集函数
标准函数 |
含义 |
oracle |
sql server |
db2 |
impala |
COUNT(x) |
计数 |
|
|
|
COUNT(x) |
COUNTD(x) |
不同值的计数 |
COUNT(DISTINCT x) |
COUNT(DISTINCT x) |
COUNT(DISTINCT x) |
COUNT(DISTINCT X) |
COUNTBIG(x) |
计数,超过max int |
COUNT(x) |
COUNT_BIG(x) |
COUNT_BIG(x) |
COUNT(x) |
COUNTBIGD(x) |
不同值的计数,超过max int |
COUNT(DISTINCT x) |
COUNT_BIG(DISTINCT x) |
COUNT_BIG(DISTINCT x) |
COUNT(DISTINCT X) |
AVG(x) |
平均 |
|
|
|
AVG(x) |
AVGD(x) |
不同值的平均 |
AVG(DISTINCT x) |
AVG(DISTINCT x) |
AVG(DISTINCT x) |
AVG(DISTINCT X) |
SUM(x) |
求和 |
|
|
|
SUM(X) |
SUMD(x) |
不同值的求和 |
SUMD(DISTINCT x) |
SUM(DISTINCT x) |
SUM(DISTINCT x) |
SUM(DISTINCT X) |
MAX(x) |
求最大值 |
|
|
|
MAX(x) |
MIN(x) |
求最小值 |
|
|
|
MIN(x) |
COUNTIF(x1,… ,xn) |
条件计数 |
SUM(CASE WHEN x1 THEN 1 … ELSE 0 END) |
SUM(CASE WHEN x1 THEN 1 … ELSE 0 END) |
SUM(CASE WHEN x1 THEN 1 … ELSE 0 END) |
SUM(CASE WHEN X1 THEN 1 …ELSE 0 END) |
其它
标准函数 |
含义 |
oracle |
sql server |
db2 |
impala |
NULLIF(x1,x2) |
若x1=x2返回null,否则返回x1 |
|
|
|
NULLIF(x1,x2) |
COALESCE(x1,…) |
返回第一个非null的参数 |
|
|
|
COALESCE(x1,…) |
CASE(when1,then1, …[,else]) |
when=true则返回相应的then,否则返回else |
CASE WHEN when1 THEN then1 … ELSE else END |
CASE WHEN when1 THEN then1 … ELSE else END |
CASE WHEN when1 THEN then1 … ELSE else END |
CASE WHEN when1 THEN then1 ELSE else END |
DQL元数据层允许用户建立自己的标准函数库以及扩展对其他数据库的支持,通过配置工具,用户可以很容易做到这一点。