描述:
将SQL语句中的标准函数翻译成指定数据库中的格式。
语法:
sql.sqltranslate(dbtype)
备注:
将标准SQL中的函数翻译成dbtype数据库中的格式。
标准函数是指SPL脚本中SQL语句使用的函数,使用sqltranslate翻译SQL时,程序会根据function.xml配置文件将标准函数翻译为对应的数据库函数。标准函数或数据库类型在function.xml中找不到则直译。
参数dbtype表示数据库类型,默认支持的数据库类型有:ORACLE ,SQLSVR ,DB2 ,MYSQL ,HSQL ,TERADATA ,POSTGRES,默认提供的标准函数可参考下面的标准函数列表,除此之外用户还可以通过修改配置文件自定义数据库类型及函数。
标准函数:
字符串函数
标准函数 |
含义 |
LOWER(str) |
转成小写。 |
UPPER(str) |
转成大写。 |
LTRIM(str) |
删除前导空白。 |
RTRIM(str) |
删除后缀空白。 |
TRIM(str) |
删除两端空白。 |
SUBSTR(str,start,len) SUBSTR(str,start) |
子串。 |
LEN(str) |
串长。 |
INDEXOF(sub,str[,start]) |
子串的位置。 |
LEFT(str,len) |
str中最左边len个字符。 |
RIGHT(str,len) |
str中最右边len个字符。 |
CONCAT(str1,str2) |
连接2个字符串。 |
REPLACE(str,sub,rplc) |
将str中的sub替换成rplc。 |
数值函数
标准函数 |
含义 |
ABS(x) |
求绝对值。 |
ACOS(x) |
求反余弦。 |
ASIN(x) |
求反正弦。 |
ATAN(x) |
求反正切。 |
ATAN2(x,y) |
求反正切。 |
CEIL(x) |
求大于等于x的最小整数。 |
COS(x) |
求余弦。 |
EXP(x) |
求e的x次幂。 |
FLOOR(x) |
求小于等于x的最大整数。 |
LN(x) |
求自然对数。 |
LOG10(x) |
求以10为底的对数。 |
MOD(x,m) |
x模m。 |
POWER(x,y) |
x的y次幂。 |
ROUND(x,n) |
四舍五入。 |
SIGN(x) |
求符号。 |
SIN(x) |
求正弦。 |
SQRT(x) |
平方根。 |
TAN(x) |
正切。 |
TRUNC(x,n) |
截断。 |
RAND(seed) |
随机数。 |
时间函数
标准函数 |
含义 |
YEAR(d) |
取年。 |
MONTH(d) |
取月。 |
DAY(d) |
取天。 |
HOUR(d) |
取小时。 |
MINUTE(d) |
取分钟。 |
SECOND(d) |
取秒。 |
QUARTER(d) |
取季度。 |
TODAY() |
今天。 |
NOW() |
当前时间。 |
ADDYEARS(d,n) |
增加年数。 |
ADDMONTHS(d, n) |
增加月数。 |
ADDDAYS(d, n) |
增加天数。 |
ADDHOURS(d, n) |
增加小时数。 |
ADDMINUTES(d, n) |
增加分钟数。 |
ADDSECONDS(d, n) |
增加秒数。 |
DAYOFYEAR(d) |
当年中第几天。 |
WEEKOFYEAR(d) |
当年中第几星期。 |
转换函数
标准函数 |
含义 |
ASCII(str) |
串中最左边字符的ASCII码。 |
CHR(n) |
整数n转换成字符。 |
INT(x) |
字符串或数值转成整数。 |
DECIMAL(x,len,scale) |
字符串或数值转成数值。 |
TIMESTAMP(str) |
yyyy-mm-dd hh24:mi:ss格式串转换成日期。 |
NUMTOCHAR(d) |
数值转成字符串。 |
DATETOCHAR(date) |
将日期转化成yyyy-mm-dd hh24:mi:ss格式串。 |
CAST(x, y) |
将x转化为数据类型y(注:y不能使用?)。 |
NULLIF(x1,x2) |
若x1=x2返回null,否则返回x1。 |
DATE(str) |
yyyy-mm-dd 格式串转换成日期。 |
任意函数
标准函数 |
含义 |
CASE(when1,then1,…[,else]) |
when=true则返回相应的then,否则返回else。 |
COALESCE(x1,…) |
返回第一个非null的参数。 |
CONCAT(s1,s2,…) |
连接多个字符串。 |
参数:
sql |
待翻译的SQL语句。 |
dbtype |
数据库类型。 |
返回值:
SQL语句
示例:
|
A |
|
1 |
SELECT ID,WEEKOFYEAR(DATES),CUSTOMER,AREA FROM CLUE |
使用标准函数WEEKOFYEAR(d)的SQL语句,function.xml中的WEEKOFYEAR函数配置如下: |
2 |
=A1.sqltranslate("ORACLE") |
返回结果: SELECT ID,TO_NUMBER(TO_CHAR(DATES,'WW')),CUSTOMER,AREA FROM CLUE |
3 |
=A1.sqltranslate("SQLSVR") |
返回结果: SELECT ID,DATEPART(WW,DATES),CUSTOMER,AREA FROM CLUE |
4 |
=A1.sqltranslate("DB2") |
返回结果: SELECT ID,WEEK(DATES),CUSTOMER,AREA FROM CLUE |
5 |
=A1.sqltranslate("MYSQL") |
返回结果: SELECT ID,WEEK(DATES),CUSTOMER,AREA FROM CLUE |
6 |
=A1.sqltranslate("HSQL") |
返回结果: SELECT ID,WEEK(DATES),CUSTOMER,AREA FROM CLUE |
7 |
=A1.sqltranslate("TERADATA") |
返回结果: SELECT ID,TD_WEEK_OF_YEAR(DATES),CUSTOMER,AREA FROM CLUE |
8 |
=A1.sqltranslate("POSTGRES") |
返回结果: SELECT ID,EXTRACT(WEEK FROM DATES),CUSTOMER,AREA FROM CLUE |
通过配置function.xml文件,可对SQL标准函数进行扩展,实现对数据库函数的修改和增加。该文件位于esproc-bin-xxxx.jar中/com/scudata/dm/sql/路径下(社区版时位于esproc-xxxx.jar中),内容如下:
FUNCTION节点中,name属性表示标准函数名称;paramcount属性表示函数中的参数个数;value表示数据库中对应的函数语法。
INFO节点中,dbtype属性表示数据库类型;value属性表示数据库中对应的函数写法,此处value为空则默认使用FUNCTION节点中的value的值。
增加自定义函数步骤:
1、定义函数名及其参数个数,在<FUNCTION>节点下配置name及paramcount属性值;
2、在<INFO>子节点下设置数据库类型,dbtype对应数据库类型,dbtype值必须使用大写字母,value对应数据库的函数。每个FUNCTION节点下可以有多个INFO子节点。
增数据库类型时,用户只需在function.xml中的FUNCTION节点中增加INFO节点,并在该节点中配置dbtype及value属性,dbtype设置为数据库类型,value设置为该数据库的对应函数即可。