sqltranslate ()

阅读(3796) 标签: 翻译, 指定格式,

描述:

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)

ex次幂。

FLOOR(x)

求小于等于x的最大整数。

LN(x)

求自然对数。

LOG10(x)

求以10为底的对数。

MOD(x,m)

xm

POWER(x,y)

xy次幂。

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>节点下配置nameparamcount属性值;

2、在<INFO>子节点下设置数据库类型,dbtype对应数据库类型,dbtype值必须使用大写字母,value对应数据库的函数。每个FUNCTION节点下可以有多个INFO子节点。

增加数据库类型:

增数据库类型时,用户只需在function.xml中的FUNCTION节点中增加INFO节点,并在该节点中配置dbtypevalue属性,dbtype设置为数据库类型,value设置为该数据库的对应函数即可。