HANA SQL参考及Oracle对照




HANA SQL参考及Oracle对照


在本部分中,主要参考了《SAP_HANA数据库SQL参考手册》,以及《ORACLE sql参考手册》,针对我们日常使用的sql方式、内置函数、关键字,进行了对比


1. 常用SQL写法


1.1. 递归查询


SQL用法:


递归查询用于查询父子节点结构的数据表,形成树状结构的数据集,常用于菜单数据集、报表结构数据


ORACLE


HANA



select



*



from


tf_rpt_hn_stat_bshzqk t



where



t.dept_id=


‘10262200’


start



with



t.dept_id=


‘10000000’



connect



by



prior



t.dept_id=t.dept_mng_id



ord





er




siblings



by



t.detp_id



select



*



from


“tf_rpt_hn_stat_bshzqk”


t



where



t.dept_id=


‘10262200’


start



with



t.dept_id=


‘10000000’



connect



by



prior



t.dept_id=t.dept_mng_id



ord





er




by



t.detp_id


对比说明:


Oracle与hana的start with…connect by prior语句是一致的,条件语句也同样是先递归查询,后where筛选


除了以上,HANA中没有level、siblings关键字,无法像oracle有额外扩展功能


SQL用法:


竖转横查询用于将数据表中竖列的数据转换为横式进行显示


ORACLE


HANA



select



t.issue,


t.dept_id,


t.obj_add_id,



max



(



decode



(t.zbdm,


‘FDCYXQK_0001’


,


t.zbz,



null



)) A,



max



(



decode



(t.zbdm,


‘FDCYXQK_0002’


,


t.zbz,



null



)) B,



max



(



decode



(t.zbdm,


‘FDCYXQK_0003’


,


t.zbz,



null



)) C



from



tf_rpt_item_data_fdsc t



group by



t.issue,t.dept_id,t.obj_add_id



select



t.issue,


t.dept_id,


t.obj_add_id,



max



(




map




(t.zbdm,


‘FDCYXQK_0001’


,


t.zbz,



null



)) A,



max



(




map




(t.zbdm,


‘FDCYXQK_0002’


,


t.zbz,



null



)) B,



max



(




map




(t.zbdm,


‘FDCYXQK_0003’


,


t.zbz,



null



)) C



from


“tf_rpt_item_data_fdsc”


t



group



by



t.issue,t.dept_id,t.obj_add_id


对比说明:


在HANA中,没有decode函数,与之功能相同的是map函数


1.2. 竖转横查询


1.3. nullif


SQL用法:


一般用于设置被除数条件,当被除数为0时,设置结果为null


ORACLE


HANA



select



100/



nullif



(




,0)



from




dua



l t



select



100/



nullif



(0,0)



from


DUMMY


对比说明:


在ORACLE与HANA中,nullif功能相同,不同的是HANA没有dual表,只有DUMMY表


1.4. nvl(oracle),ifnull(hana)


SQL用法:


当参数值为null时,返回指定的value


ORACLE


HANA



select


nvl(aaa,0)



from



tab t



select


nvl(aaa,0)



from



tab t


对比说明:


hana中为ifnull;oracle中为nvl


1.5. delete


SQL用法:


delete数据


ORACLE


HANA



delete from t1 a where exists (select 1 from t2 b where a.id = b.id )



delete from t1 a where exists (select 1 from t2 b where a.id = b.id )


对比说明:


HANA的DELETE语句与ORACLE类似,FROM子句只支持1个表(即需要从中删除记录的表)。 如果某个表需要删除的记录集合与其他表相关,那么需要在WHERE条件中实现关联。


1.6. with子句


SQL用法:


用于定义虚拟表,方便多层嵌套语句的可读性


ORACLE


HANA




with




bb




as




(





select




t.*




from




a t)




select




*




from




bb



with



子句写法语法有误


替代写法



select



*



from



(



select



*



from



“STS”


.


“TF_RBAC_DEPARTMENT”


)


bb


对比说明:


在HANA中,不支持with子句功能


1.7. update表


SQL用法:


update数据表中的数据


ORACLE


HANA



update


“STS”


.


“TF_RBAC_DEPARTMENT”


t



set



(addr,sort)=(


‘11111’


,100)



update



“STS”


.


“TF_RBAC_DEPARTMENT”


t



set



(addr,sort)=(


‘11111’


,100)


对比说明:


update数据表语句一致


1.8. 多表关联update


SQL用法:


update数据表中的数据


ORACLE


HANA




update



TF_RPT_AJ_M_JZJCSJB



t





set




(




t




.




tcrq




,




t




.




zjycdxsj




)=(




select



t1




.




tbbssj




,




t1




.




tjsj





from



TF_RPT_HN_STAT_BSHZQK



t1





where



t




.




issue




=




t1




.




issue



and



t




.




dept_id




=




t1




.




dept_id



and



t1




.




rpt_id




=




‘HAY01’




)





where



exists




(




select



1





from



TF_RPT_HN_STAT_BSHZQK



t1





where



t




.




issue




=




t1




.




issue



and



t




.




dept_id




=




t1




.




dept_id



and



t1




.




rpt_id




=




‘HAY01’




)



update


“TB”


.


“TF_RPT_AJ_M_JZJCSJB”


t



set



(t.tcrq,t.zjycdxsj)=(t1.tbbssj,t1.tjsj)



from



“TB”


.


“TF_RPT_HN_STAT_BSHZQK”


t1



where



t.issue=t1.issue



and



t.dept_id=t1.dept_id



and



t1.rpt_id=


‘HAY01’


对比说明:


在hana中,如果某个表需要更新的记录集合与其他表相关,那么需要在FROM子句中指定相关的表,在WHERE子句中加入关联条件;


而对于oracle,多表关联update复杂一些,oracle不支持from子句,即不支持update from语法


1.9. 插入更新


SQL用法:


对于已经存在的记录进行更新,对于新的记录插入


ORACLE


HANA



merge into



UPSERT



T(



key



,val)



VALUES



(1, 9)



WHERE



KEY



= 1


;



UPSERT



T(



key



,val)



VALUES



(1, 8)



WITH




PRIMARY



KEY



;


对比说明:


Oracle的merge into从9i就存在,可以对存在的记录进行更新,对于新的记录插入,避免proc中条件判断的低效率,相关信息可以自行baidu;


Hana的upsert可以对存在的记录进行更新,对于新的记录插入,在列出的字段中,必须包含所有的主键字段,需要注意的是,upsert不是标准的sql语句,在各个数据库中不同


1.10. 多表关联插入更新


SQL用法:


关联其他数据表数据,对于已经存在的记录进行更新,对于新的记录插入


ORACLE


HANA



merge into



UPSERT



“TB”


.


“TF_RPT_AJ_M_JZJCSJB”


(issue,dept_id,jz_id,tcrq,zjycdxsj)



select



t1.issue,t1.dept_id,



t.jz_id,t1.tbbssj,t1.tjsj



from



“TB”


.


“TF_RPT_HN_STAT_BSHZQK”


t1,TF_RPT_AJ_M_JZJCSJB t



where



t.issue=t1.issue



and



t.dept_id=t1.dept_id



and



t1.rpt_id=


‘HAY01’


对比说明:


Oracle的merge into从9i就存在,可以对存在的记录进行更新,对于新的记录插入,避免proc中条件判断的低效率,相关信息可以自行baidu;


Hana的upsert可以对存在的记录进行更新,对于新的记录插入,在列出的字段中,必须包含所有的主键字段,多表关联时,比较类似insert语法


需要注意的是,upsert不是标准的sql语句,在各个数据库中不同


1.11. like搜索


SQL用法:


用like进行模糊搜索


ORACLE


HANA



select



*



from


“STS”


.


“tf_rpt_hn_stat_bshzqk”


t



where



t.dept_id



like


‘100_’



select



*



from



“STS”


.


“tf_rpt_hn_stat_bshzqk”


t



where



t.dept_id



like


‘100_’


对比说明:


like数据表语句一致,可以用%或是_进行匹配


1.12. case when


SQL用法:


在sql中使用if…then…else逻辑


ORACLE


HANA




select




t.jzlb,





case



when




t.jzlb=




‘火电’



then



‘HD’




when




t.jzlb=




‘水电’



then



‘SD’





ELSE



‘UNKOWN’



END




from




tf_rpt_dept_jzxx t



select



t.jzlb,



case



when



t.jzlb=


‘火电’



then


‘HD’



when



t.jzlb=


‘水电’



then


‘SD’



ELSE


‘UNKOWN’



END



from


“STS”


.


“tf_rpt_dept_jzxx”


t


对比说明:


case when使用同oracle一样,


1.13. 多表关联


SQL用法:


2个及以上数据表关联查询


ORACLE


HANA




select




*





from




tf_rpt_dept_jzxx t,tf_rpt_hn_stat_bshzqk t1




where




t.dcdm=t1.dept_id



select



*



from


“tf_rpt_dept_jzxx”


t,


“tf_rpt_hn_stat_bshzqk”


t1



where



t.dcdm=t1.dept_id


对比说明:


写法一样


1.14. 外关联


SQL用法:


外连接查询


ORACLE


HANA




select




*





from




tf_rpt_dept_jzxx t





left



outer



join




tf_rpt_hn_stat_bshzqk t1





on




t.dcdm=t1.dept_id




where




t1.issue=




‘320131100’



select



*



from


“tf_rpt_dept_jzxx”


t



left



outer



join


“tf_rpt_hn_stat_bshzqk”


t1



on



t.dcdm=t1.dept_id



where



t1.issue=


‘320131100’


对比说明:


写法一样,另外说明Oracle有一种(+)的外关联写法,不推荐这种方式


1.15. 当前时间1天后


SQL用法:


外连接查询


ORACLE


HANA




select



sysdate+1





from



dual




t




select



ADD_DAYS(



CURRENT_TIMESTAMP



,1)



from



dummy


对比说明:


在hana中,日期时间不能加减number,只能通过日期时间函数


当前时间1个月后


SQL用法:


外连接查询


ORACLE


HANA




select



add_months(sysdate,1)





from



dual




t




select



ADD_


MONTH


S(



CURRENT_TIMESTAMP



,1)



from



dummy


对比说明:


在hana中,日期时间不能加减number,只能通过日期时间函数


1.16. 返回数据集的前几个记录


SQL用法:


用于返回sql查询数据集的前几个记录


ORACLE


HANA




select



*




from



dual




t





where rownum=5




select



*



from



“TB”


.


“TF_RPT_HN_STAT_BSHZQK”


t



where



t.issue=


‘2013-12’



limit


10


offset


5


对比说明:


在oracle中,是通过其内置的rownum字段进行记录集的截取;在hana中,是通过limit子句进行


1.17. 全球唯一标识符


SQL用法:


返回全球唯一的标识符,常用于写主键值


ORACLE


HANA




select



sys_guid




()




from



dual




;




select



SYSUUID



from



dummy


;


对比说明:


Hana与oracle中都是通过函数实现返回全球唯一的标识符,生成一个16字节的原始值,每个字节2个16进制显示位,即可认为是32位长度的字符串,


该标识符主要是用于数据表主键字段的取值,避免seq的序列值,同时对数据表数据的合并时很有用。


1.18. 计算累计partition by


SQL用法:


计算累计


ORACLE


HANA




select



t




.




issue




,




t




.




zbz




,




sum




(




zbz




)




over




(




partition



by



substr




(




t




.




issue




,




1




,




5




)




order



by



t




.




issue




)





from



tf_rpt_item_data_fdsc



t





where



substr




(




t




.




issue




,




1




,




5




)=




‘32013’




and



t




.




zbdm




=




‘FDCYXQK_0004’




and



t




.




dept_id




=




‘10272700’




and



t




.




obj_add_id




=




‘1’




select



t.issue,t.zbz,



sum



(zbz) over (



partition



by



substr



(t.issue,1,5)



order




by



t.issue)



from



tf_rpt_item_data_fdsc t



where



substr



(t.issue,1,5)=


‘32013’



and



t.zbdm=


‘FDCYXQK_0004’



and



t.dept_id=


‘10272700’



and



t.obj_add_id=


‘1’


对比说明:


Hana与oracle的计算累计sql是一致的,同时其他的聚合函数,如max、min、avg等都支持partition by


2. 数据类型对比


2.1. 日期时间类型


2.1.1. DATE


ORACLE


HANA



DATE



DATE


可用的日期范围从BC4712年1月1日至AC9999年12月31日


数据包含世纪、年份、月、日、时、分、秒信息,最小时间粒度是秒


默认格式为“YYYY-MM-DD”


时间值的范围从


0001-01-01





9999-12-31


DATE


数据类型由年、月、日信息组成,表示一个日期值,最小时间粒度为日


DATA


类型的默认格式为


‘YYYY





MM-DD’





YYYY


表示年,


MM


表示月而


DD


表示日。


对比说明:


虽然在Oracle和Hana中都有DATE数据类型,但是需要注意的是在HANA中,date只表示日期,即数据精度为日,这一点与Oracle中的date有很大不同


2.1.2. TIME


ORACLE


HANA







TIME


TIME


数据类型由小时、分钟、秒信息组成,表示一个时间值。


TIME


类型的默认格式为


‘HH24:MI:SS’





HH24


表示从


0





24


的小时数,


MI


代表


0





59


的分钟值而


SS


表示


0





59


的秒


对比说明:


HANA中的time类型表示时间,而Oracle中没有对应的类型


2.1.3. SECONDDATE


ORACLE


HANA



DATE



SECONDDATE


TIME


数据类型由小时、分钟、秒信息组成,表示一个时间值。


TIME


类型的默认格式为


‘HH24:MI:SS’





HH24


表示从


0





24


的小时数,


MI


代表


0





59


的分钟值而


SS


表示


0





59


的秒


对比说明:


HANA中的SECONDDATE表示日期时间,与oracle中的date相同,只是可用时间范围不同


2.1.4. Timestamp


ORACLE


HANA



TIMESTAMP



TIMESTAMP


TIMESTAMP


数据类型由日期和时间信息组成。其默认格式为


‘YYYY-MM-DD


HH24:MI:SS.FF


6




其中精度位为0至9


TIMESTAMP


数据类型由日期和时间信息组成。其默认格式为


‘YYYY-MM-DD


HH24:MI:SS.FF7’





FFn


代表含有小数的秒,其中


n


表示小数部分的数字位数。时间戳的范围从


0001-01-01 00:00:00.0000000





9999-12-31 23:59:59.9999999


其中精度位为1至7


对比说明:


ORACLE与HANA中的TIMESTAMP表示日期时间,以及表示精度的小数位秒,Oracle默认精度为0.000001秒,HANA默认精度为0.0000001秒


2.2. 数字类型


2.2.1. DECIMAL


ORACLE


HANA



NUMBER



DECIMAL


Number having precision

p

and scale

s

. The precision

p

can range from 1 to 38. The scale

s

can range from -84 to 127


DECIMAL (p, s)


数据类型指定了一个精度为


p


小数位数为


s


的定点小数。精度是有效位数的总数,范围从


1





34




小数位数是从小数点到最小有效数字的数字个数,范围从


-6,111





6,176


,这表示位数指定了十进制小数的指数范围从


10


-6111





10


6176


。如果没有指定小数位数,则默认值






当数字的有效数字在小数点的右侧时,小数位数为正;有效数字在小数点左侧时,小数位数为负。


对比说明:


ORACLE中的number与HANA中的decimal是基本一致的,在精度和小数位数的范围上有所不同


2.3. 字符类型


2.3.1. VARCHAR2


ORACLE


HANA



VARCHAR2



VARCHAR


varchar2存放字符数据最大长度为4000字节


varchar2把一般情况下所有字符都占两字节处理


VARCHAR2把空串等同于null处理


VARCHAR2字符要用几个字节存储,要看数据库使用的字符集


VARCHAR (n)


数据类型定义了一个可变长度的


ASCII


字符串,


n


表示最大长度,是一个


1





5000


的整数值


对比说明:


ORACLE中的varchar2与HANA中的varchar是基本一致的,在最大长度上有所区别


2.3.2. NVARCHAR


ORACLE


HANA



NVARCHAR2



NVARCHAR


nvarchar2用于存储可变长度的字符串,size 的最大值是 4000,而最小值是 1,其值表示字符的个数,而不是字节数


NVARCHAR (n)


数据类型定义了一个可变长度的


Unicode


字符串,


n


表示最大长度,是一个


1





5000


的整数值


对比说明:


ORACLE中的nvarchar2与HANA中的nvarchar是基本一致的,在最大长度上有所区别


2.4. 大对象类型


2.4.1. BLOB


ORACLE


HANA



CLOB



CLOB



可用来存储无结构的二进制数据



最大长度是4GB


BLOB


数据类型用来存储大二进制数据


最大大小为


2GB


对比说明:


ORACLE和HANA中的BLOB是基本一致的,在最大大小上有所区别


2.4.2. CLOB


ORACLE


HANA



CLOB



CLOB



用于存储对应于数据库定义的字符集的字符数据



最大长度是4GB


CLOB


数据类型用来存储大


ASCII


字符数据


最大大小为


2GB


对比说明:


ORACLE和HANA中的CLOB是基本一致的,在最大大小上有所区别


2.4.3. NCLOB


ORACLE


HANA



NCLOB



NCLOB


用来存储定宽多字节字符数据,保存本地语言字符集数据最大长度是4GB


NCLOB


数据类型用来存储大


Unicode


字符对象


最大大小为


2GB


对比说明:


ORACLE和HANA中的NCLOB是基本一致的,在最大大小上有所区别


2.4.4. TEXT


ORACLE


HANA



TEXT


TEXT


数据类型指定支持文本搜索功能,这不是一个独立的


SQL


类型。选择一列


TEXT


列会生成一个


NCLOB


类型的列


对比说明:


TEXT是HANA所特有的数据类型,是为了满足其非结构化数据分析的需要,Oracle中没有相应的数据类型


3. SQL函数


3.1. 数据类型转换函数


3.1.1. CAST



ORACLE



HANA



CAST



CAST


CAST (expression AS data_type)


CAST (expression AS data_type)


CAST


converts one built-in datatype or collection-typed value into another built-in datatype or collection-typed value.


用来把参数从一个数据类型转换为另一个数据类型,或者测试转换是否可行



select



CAST



(111



AS



DATE



)



FROM


DUAL


执行出错



select



CAST



(111



AS



DATE



)



FROM



DUMMY


对比说明:


CAST在oracle和hana中功能是一致的,只是在转换类型方面有所差距,比如,oracle中number不能转换成date,而hana中可以


3.1.2. TO_ALPHANUM



ORACLE



HANA



TO_ALPHANUM


TO_ALPHANUM (value)


将给定的


value


转换为


ALPHANUM


数据类型。



SELECT



TO_ALPHANUM (


’10’


)


“to alphanum”



FROM



DUMMY


;


对比说明:


ALPHANUM是可变长度的包含字母数字的字符串,在实际应用中很少使用,故该转换函数TO_ALPHANUM也很少使用


3.1.3. TO_BIGINT



ORACLE



HANA



TO_BIGINT


TO_BIGINT (value)





value


转换为


BIGINT


类型



SELECT



TO_BIGINT (


’10’


)


“to bigint”



FROM



DUMMY


;


对比说明:


BIGINT是64位有符号整数,Oracle中一般使用number类型,没有对应转换函数


3.1.4. TO_BINARY



ORACLE



HANA



TO_BINARY


TO_BINARY (value)





value


转换为


BINARY


类型



SELECT



TO_BINARY (


‘abc’


)


“to binary”



FROM



DUMMY


;


对比说明:


BINARY是二进制数据,Oracle没有对应转换函数


3.1.5. TO_BLOB



ORACLE



HANA



TO_BLOB



TO_BLOB


TO_BLOB (value)


TO_BLOB (value)





value


转换为


BLOB


类型。参数值


LONG RAW 或 RAW 类型的数据,输出的是 BLOB 值


,LONG RAW、RAW类型


相当于其他编程语音中的bin类型数据


,即二进制数据





value


转换为


BLOB


类型。参数值必须是二进制字符串,即VARBINARY类型



SELECT



TO_BLOB (



CAST



(


‘abcde’



AS



RAW))


“to blob”



FROM



DUMMY


;



SELECT



TO_BLOB (TO_BINARY(


‘abcde’


))


“to blob”



FROM



DUMMY


;


对比说明:


在oracle和hana中都有TO_BLOB函数,转换功能基本一样,但是Oracle中的TO_BLOB函数在11g才有,之前8i到10g,只有TO_LOB函数


4.2.6. TO_CHAR



ORACLE



HANA



TO_CHAR



TO_CHAR


TO_


CHAR


(value)


TO_


CHAR


(value)


TO_CHAR


(character) converts NCHAR, NVARCHAR2, CLOB, or NCLOB data to the database character set.


TO_CHAR


(datetime) converts

date

of DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, or TIMESTAMP WITH LOCAL TIME ZONE datatype to a value of VARCHAR2 datatype in the format specified by the date format

fmt


TO_CHAR


(number) converts

n

of NUMBER datatype to a value of VARCHAR2 datatype, using the optional number format

fmt

. If you omit

fmt

, then

n

is converted to a VARCHAR2 value exactly long enough to hold its significant digits





value


转换为


CHAR


类型。如果省略


format


关键字,转换将会使用


Date Formats


中说明的日期格式模型



SELECT



TO_CHAR (TO_DATE(


‘2009-12-31’


),


‘YYYY/MM/DD’


)


“to char”



FROM



DUMMY


;


对比说明:


在oracle和hana中都有TO_CHAR函数,转换功能基本一样。不同之处在于,hana的to_char是转化为char类型,而oracle的to_char则是转化为varchar2类型,并且字符编码是基于数据库字符集


4.2.7. TO_CLOB



ORACLE



HANA



TO_CLOB



TO_CLOB


TO_


C


LOB (value)


TO_


C


LOB (value)


TO_CLOB


converts NCLOB values in a LOB column or other character strings to CLOB values.

char

can be any of the datatypes CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB. Oracle executes this function by converting the underlying LOB data from the national character set to the database character set.





value


转换为


CLOB


类型



SELECT



TO_BLOB (



CAST



(


‘abcde’



AS



RAW))


“to blob”



FROM



DUMMY


;



SELECT



TO_CLOB (


‘TO_CLOB converts the value to a CLOB data type’


)


“to clob”



FROM



DUMMY


;


对比说明:


在oracle和hana中都有TO_CLOB函数,转换功能基本一样,但是Oracle中的TO_BLOB函数在10g才有,之前8i到9i,只有TO_LOB函数


4.2.8. TO_DATE



ORACLE



HANA



TO_DATE



TO_DATE


TO_DATE ( char [, fmt [, ‘nlsparam’]] )


TO_DATE (d [, format])


TO_DATE


converts

char

of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype to a value of DATE datatype. The

fmt

is a date format specifying the format of

char

. If you omit

fmt

, then

char

must be in the default date format. If

fmt

is ‘J’, for Julian, then

char

must be an integer


将日期字符串


d


转换为


DATE


数据类型。如果省略


format


关键字,转换将会使用


Date Formats


中说明的日期格式模型。



SELECT



TO_DATE(


‘January 15, 1989, 11:00 A.M.’


,


‘Month dd, YYYY, HH:MI A.M.’


,


‘NLS_DATE_LANGUAGE = American’


)



FROM



DUAL


;



SELECT



TO_DATE(


‘2010-01-12’


,


‘YYYY-MM-DD’


)


“to date”



FROM



DUMMY


;


对比说明:


在oracle和hana中都有TO_DATE函数,但是转换功能有一点不同,hana的to_date只能转换成日期,即hana的date类型,只包含年月日,而oracle的to_date是转换为oracle的date类型,包含年月日时分秒


4.2.9. TO_DATS



ORACLE



HANA



TO_DATS


TO_DATS (d)


将字符串


d


转换为


ABAP


日期字符串,格式为


”YYYYMMDD”



SELECT



TO_DATS (


‘2010-01-12’


)


“abap date”



FROM



DUMMY


;


对比说明:


该转换函数是HANA所特有的,用于转换为ABAP日期字符串


4.2.10. TO_DECIMAL



ORACLE



HANA



TO_NUMBER



TO_DECIMAL


TO_NUMBER ( char [, fmt [, ‘nlsparam’]] )


TO_DECIMAL (value [, precision, scale])


TO_NUMBER


converts

char

, a value of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype containing a number in the format specified by the optional format model

fmt

, to a value of NUMBER datatype





value


转换为


DECIMAL


类型。



SELECT



TO_NUMBER(


‘-AusDollars100’


,


‘L9G999D99’


,



‘ NLS_NUMERIC_CHARACTERS = ”,.”


NLS_CURRENCY = ”AusDollars”





)


“Amount”



FROM



DUAL


;



SELECT




TO_DECIMAL



(7654321.888888, 10, 3)


“to decimal”



FROM



DUMMY


;


对比说明:


HANA的to_decimal与ORACLE的to_number在功能上基本一致,都能将字符串转换为数字类型;在参数上有所区别,hana的to_decimal的参数还包括数字的精度和小数位,而Oracle的to_number的参数包括数字格式,以及nlsparam参数


4.2.11. TO_DOUBLE



ORACLE



HANA



TO_DOUBLE


TO_DOUBLE (value)





value


转换为


DOUBLE


(双精度)数据类型。



SELECT



3*TO_DOUBLE (


‘15.12’


)


“to double”



FROM



DUMMY


;


对比说明:


4.2.12. TO_INT



ORACLE



HANA



TO_INT


TO_INTEGER (value)





value


转换为


INTEGER


类型。



SELECT



TO_INT(


’10’


)


“to int”



FROM



DUMMY


;


对比说明:


4.2.13. TO_INTEGER



ORACLE



HANA



TO_INTEGER


TO_INT


EGER


(value)





value


转换为


INTEGER


类型。



SELECT



TO_INT


EGER


(


’10’


)


“to int


eger






FROM



DUMMY


;


对比说明:


4.2.14. TO_NCHAR



ORACLE



HANA



TO_NCHAR


TO_NCHAR (value [, format])





value


转换为


NCHAR Unicode


字符类型。如果省略


format


关键字,转换将会使用


Date Formats


中说明的日期格式模型。



SELECT



TO_NCHAR (TO_DATE(


‘2009-12-31’


),


‘YYYY/MM/DD’


)


“to nchar”



FROM



DUMMY


;


对比说明:


4.2.15. TO_NCLOB



ORACLE



HANA



TO_NCLOB



TO_NCLOB


TO_NCLOB ( lob_column | char )


TO_NCLOB (value)


TO_NCLOB


co 香港云主机nverts CLOB values in a LOB column or other character strings to NCLOB values.

char

can be any of the datatypes CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB. Oracle implements this function by converting the character set of the LOB column from the database character set to the national character set.





value


转换为


NCLOB


数据类型。



INSERT



INTO



print_media (product_id, ad_id, ad_fltextn)



VALUES



(3502, 31001,


TO_NCLOB(


‘Placeholder for new product description’


))


;



SELECT



TO_NCLOB (


‘TO_NCLOB converts the value to a NCLOB data type’


)


“to nclob”



FROM



DUMMY


;


对比说明:


功能基本一致,其中Oracle的TO_NCLOB还会将value的字符集转换为本地字符集


4.2.16. TO_NVARCHAR



ORACLE



HANA



TO_NVARCHAR


TO_NVARCHAR (value [,format])





value


转换为


NVARCHAR Unicode


字符类型。如果省略


format


关键字,转换将会使用


Date


Formats


中说明的日期格式模型。



SELECT



TO_NVARCHAR(TO_DATE(


‘2009/12/31’


),


‘YY-MM-DD’


)


“to nchar”



FROM



DUMMY


;


对比说明:


Hana的中to_nvarchar是将value转化为unicode字符的NVARCHAR类型,功能都是转化为字符串,只是字符集不同,而Oracle中to_char函数统一实现该功能,通过nlsparam参数实现字符集的定义


4.2.17. TO_REAL



ORACLE



HANA



TO_REAL


TO_REAL (value)





value


转换为实数(单精度)数据类型。


SELECT 3*TO_REAL (‘15.12’) “to real” FROM DUMMY;


对比说明:


4.2.18. TO_SECONDDATE



ORACLE



HANA



TO_DATE



TO_SECONDDATE


TO_DATE ( char [, fmt [, ‘nlsparam’]] )


TO_REAL (value)


TO_DATE


converts

char

of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype to a value of DATE datatype. The

fmt

is a date format specifying the format of

char

. If you omit

fmt

, then

char

must be in the default date format. If

fmt

is ‘J’, for Julian, then

char

must be an integer





value


转换为


SECONDDATE


类型。如果省略


format


关键字,转换将会使用


Date Formats


中说明的日期格式模型



SELECT



TO_DATE(


‘January 15, 1989, 11:00 A.M.’


,


‘Month dd, YYYY, HH:MI A.M.’


,


‘NLS_DATE_LANGUAGE = American’


)



FROM



DUAL


;



SELECT



TO_SECONDDATE (


‘2010-01-11 13:30:00’


,


‘YYYY-MM-DD HH24:MI:SS’


)


“to seconddate”



FROM



DUMMY


;


对比说明:


HANA中有几种日期时间类型,也分别对应3种转换函数,该转换函数to_seconddate是最接近Oracle的to_date,在具体使用时,注意甄别


4.2.19. TO_SMALLDECIMAL



ORACLE



HANA



TO_SMALLDECIMAL


TO_SMALLDECIMAL (value)





value


转换为


SMALLDECIMAL


类型。



SELECT



TO_SMALLDECIMAL(7654321.89)


“to smalldecimal”



FROM



DUMMY


;


对比说明:


4.2.20. TO_SMALLINT



ORACLE



HANA



TO_SMALLINT


TO_SMALL


INT


(value)





value


转换为


SMALLINT


类型。



SELECT



TO_SMALLINT (


’10’


)


“to smallint”



FROM



DUMMY


;


对比说明:


4.2.21. TO_TIME



ORACLE



HANA



TO_TIME


TO_TIME (t [, format])


将时间字符串


t


转换为


TIME


类型。如果省略


format


关键字,转换将会使用


Date Formats


中说明的日期格式模型



SELECT



TO_TIME (


’08:30 AM’


,


‘HH:MI AM’


)


“to time”



FROM



DUMMY


;


对比说明:


4.2.22. TO_TIMESTAMP



ORACLE



HANA



TO_TIMESTAMP


TO_TIMESTAMP (d [, format])


将时间字符串


t


转换为


TIMESTAMP


类型。如果省略


format


关键字,转换将会使用


Date Formats


中说明的日期格式模型。



SELECT



TO_TIMESTAMP (


‘2010-01-11 13:30:00’


,


‘YYYY-MM-DD HH24:MI:SS’


)


“to timestamp”



FROM



DUMMY


;


对比说明:


4.2.23. TO_TINYINT



ORACLE



HANA



TO_TINYINT


TO_TINYINT (value)





value


转换为


TINYINT


类型。



SELECT



TO_TINYINT (


’10’


)


“to tinyint”



FROM



DUMMY


;


对比说明:


4.2.24. TO_VARCHAR



ORACLE



HANA



TO_CHAR



TO_VARCHAR


TO_


CHAR


(value)


TO_VARCHAR (value [, format])


将给定


value


转换为


VARCHAR


字符串类型。如果省略


format


关键字,转换将会使用


Date Formats


中说明的日期格式模型。



SELECT



TO_VARCHAR (TO_DATE(


‘2009-12-31’


),


‘YYYY/MM/DD’


)


“to char”



FROM



DUMMY


;


对比说明:


HANA中的to_varchar与Oracle的to_char基本相关,都是将数字型、时间日期型数据转换为varchar(varchar2)类型


4.3. 日期时间函数


4.3.1. ADD_DAYS



ORACLE



HANA



ADD_DAYS


ADD_DAYS (d, n)


计算日期


d





n


天的值



SELECT



ADD_DAYS (TO_DATE (


‘2009-12-05’


,


‘YYYY-MM-DD’


), 30)


“add days”



FROM



DUMMY


;


对比说明:


Oracle中没有对应的函数,只是在oracle中,date类型可以直接+-number,实现同样功能;HANA中该函数可以用于date、seconddate类型,并且date、seconddate不能加减number


4.3.2. ADD_MONTHS



ORACLE



HANA



ADD_MONTHS



ADD_MONTHS


ADD_MONTHS (d, n)


ADD_MONTHS (d, n)


返回日期


d





n


个月的日期,如果日期d是月末、或是结果日期所在月天数较少,少于日期


d


的日期数,结果将返回结果月份的月末日期。


计算日期


d





n


月的值。



SELECT



ADD_MONTHS (TO_DATE (


‘2009-12-05’


,


‘YYYY-MM-DD’


), 1)


“add months”



FROM


DUAL



SELECT



ADD_MONTHS (TO_DATE (


‘2009-12-05’


,


‘YYYY-MM-DD’


), 1)


“add months”



FROM



DUMMY


对比说明:


Hana与oracle中的该函数功能一样,HANA中该函数可以用于date、seconddate类型


4.3.3. ADD_SECONDS



ORACLE



HANA



ADD_SECONDS


ADD_SECONDS (t, n)


计算时间


t





n


秒的值。



SELECT



ADD_SECONDS (TO_TIMESTAMP (


‘2012-01-01 23:30:45’


), 60*30)


“add seconds”



FROM



DUMMY


;


对比说明:


Oracle中没有对应的函数,只是在oracle中,date类型可以直接+-number,实现同样功能;HANA中该函数可以用于time、timestamp、seconddate类型,并且time、timestamp、seconddate不能加减number


4.3.4. ADD_YEARS



ORACLE



HANA



ADD_YEARS


ADD_YEARS (d, n)


计算日期


d





n


年的值。



SELECT



ADD_YEARS (TO_DATE (


‘2009-12-05’


,


‘YYYY-MM-DD’


), 1)


“add years”



FROM



DUMMY


;


对比说明:


4.3.5. CURRENT_DATE



ORACLE



HANA



SYSDATE



CURRENT_DATE


S


ysdate


CURRENT_DATE


返回当前本地系统日期时间。


返回当前本地系统日期。



SELECT



SYSDATE



FROM



DUMMY


;



SELECT



CURRENT_DATE


“current date”



FROM



DUMMY


;


对比说明:


HANA的CURRENT_TIME与oracle的SYSDATE功能基本一致,但是hana的该函数只是返回日期


4.3.6. CURRENT_TIME


4.3.7. CURRENT_TIMESTAMP


4.3.8. CURRENT_UTCDATE


4.3.9. CURRENT_UTCTIME


4.3.10. CURRENT_UTCTIMESTAMP


4.3.11. DATNAME


4.3.12. DAYOFMONTH


4.3.13. DAYOFYEAR


4.3.14. DAYS_BETWEEN


4.3.15. EXTRACT


4.3.16. HOUR


4.3.17. ISOWEEK


4.3.18. LAST_DAY


4.3.19. LOCALTOUTC


4.3.20. MINUTE


4.3.21. MONTH


4.3.22. MONTHNAME


4.3.23. NEXT_DAY


4.3.24. NOW


4.3.25. QUARTER


4.3.26. SECOND


4.3.27. SECONDS_BETWEEN


4.3.28. UTCTOLOCAL


4.3.29. WEEK


4.3.30. WEEKDAY


4.3.31. YEAR


4.4. 数字函数


ABS


ACOS


ASIN


ATAN


ATAN2


BINTOHEX


BITAND


CEIL


COS


COSH


COT


EXP


FLOOR


GREATEST


HEXTOBIN


LEAST


LN


LOG


MOD


POWER


ROUND


SIGN


SIN


SINH


SQRT


TAN


TANH


UMINUS


4.5. 字符串函数


4.5.1. ASCII


4.5.2. CHAR


4.5.3. CONCAT


4.5.4. LCASE


4.5.5. LEFT


4.5.6. LENGTH


4.5.7. LOCATE


4.5.8. LOWER


4.5.9. LPAD


4.5.10. LTRIM


4.5.11. NCHAR


4.5.12. REPLACE


4.5.13. RIGHT


4.5.14. RPAD


4.5.15. RTRIM


4.5.16. SUBSTR_AFTER


4.5.17. SUBSTR_BEFORE


4.5.18. SUBSTRING


4.5.19. TRIM


4.5.20. UCASE


4.5.21. UNICODE


4.5.22. UPPER


4.6. 杂项函数


4.6.1. COALESCE


4.6.2. CURRENT_CONNECTION


4.6.3. CURRENT_SCHEMA


4.6.4. CURRENT_USER


4.6.5. GROUPING_ID


4.6.6. IFNULL


4.6.7. MAP


4.6.8. NULLIF


4.6.9. SESSION_CONTEXT


4.6.10. SESSION_USER


4.6.11. SYSUUID

相关推荐: Nginx配置React项目时报404怎么解决

本篇内容介绍了“Nginx配置React项目时报404怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!大家都知道,当写完项目后,要对项目进行部署,配置很简…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/24 12:12
Next 07/24 12:13

相关推荐