您好,登錄后才能下訂單哦!
HANA SQL參考及Oracle對(duì)照
在本部分中,主要參考了《SAP_HANA數(shù)據(jù)庫(kù)SQL參考手冊(cè)》,以及《ORACLE sql參考手冊(cè)》,針對(duì)我們?nèi)粘J褂玫膕ql方式、內(nèi)置函數(shù)、關(guān)鍵字,進(jìn)行了對(duì)比
1. 常用SQL寫法
1.1. 遞歸查詢
SQL用法: 遞歸查詢用于查詢父子節(jié)點(diǎn)結(jié)構(gòu)的數(shù)據(jù)表,形成樹(shù)狀結(jié)構(gòu)的數(shù)據(jù)集,常用于菜單數(shù)據(jù)集、報(bào)表結(jié)構(gòu)數(shù)據(jù) |
|
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 |
對(duì)比說(shuō)明: Oracle與hana的start with…connect by prior語(yǔ)句是一致的,條件語(yǔ)句也同樣是先遞歸查詢,后where篩選 除了以上,HANA中沒(méi)有l(wèi)evel、siblings關(guān)鍵字,無(wú)法像oracle有額外擴(kuò)展功能 |
|
SQL用法: 豎轉(zhuǎn)橫查詢用于將數(shù)據(jù)表中豎列的數(shù)據(jù)轉(zhuǎn)換為橫式進(jìn)行顯示 |
|
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 |
對(duì)比說(shuō)明: 在HANA中,沒(méi)有decode函數(shù),與之功能相同的是map函數(shù) |
|
1.2. 豎轉(zhuǎn)橫查詢
1.3. nullif
SQL用法: 一般用于設(shè)置被除數(shù)條件,當(dāng)被除數(shù)為0時(shí),設(shè)置結(jié)果為null |
|
ORACLE |
HANA |
select 100/ nullif ( ,0) from dua l t |
select 100/ nullif (0,0) from DUMMY |
對(duì)比說(shuō)明: 在ORACLE與HANA中,nullif功能相同,不同的是HANA沒(méi)有dual表,只有DUMMY表 |
|
1.4. nvl(oracle),ifnull(hana)
SQL用法: 當(dāng)參數(shù)值為null時(shí),返回指定的value |
|
ORACLE |
HANA |
select nvl(aaa,0) from tab t |
select nvl(aaa,0) from tab t |
對(duì)比說(shuō)明: hana中為ifnull;oracle中為nvl |
|
1.5. delete
SQL用法: delete數(shù)據(jù) |
|
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 ) |
對(duì)比說(shuō)明: HANA的DELETE語(yǔ)句與ORACLE類似,F(xiàn)ROM子句只支持1個(gè)表(即需要從中刪除記錄的表)。 如果某個(gè)表需要?jiǎng)h除的記錄集合與其他表相關(guān),那么需要在WHERE條件中實(shí)現(xiàn)關(guān)聯(lián)。 |
|
1.6. with子句
SQL用法: 用于定義虛擬表,方便多層嵌套語(yǔ)句的可讀性 |
|
ORACLE |
HANA |
with bb as ( select t.* from a t) select * from bb |
with 子句寫法語(yǔ)法有誤 替代寫法 select * from ( select * from "STS" . "TF_RBAC_DEPARTMENT" ) bb |
對(duì)比說(shuō)明: 在HANA中,不支持with子句功能 |
|
1.7. update表
SQL用法: update數(shù)據(jù)表中的數(shù)據(jù) |
|
ORACLE |
HANA |
update "STS" . "TF_RBAC_DEPARTMENT" t set (addr,sort)=( '11111' ,100) |
update "STS" . "TF_RBAC_DEPARTMENT" t set (addr,sort)=( '11111' ,100) |
對(duì)比說(shuō)明: update數(shù)據(jù)表語(yǔ)句一致 |
|
1.8. 多表關(guān)聯(lián)update
SQL用法: update數(shù)據(jù)表中的數(shù)據(jù) |
|
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' |
對(duì)比說(shuō)明: 在hana中,如果某個(gè)表需要更新的記錄集合與其他表相關(guān),那么需要在FROM子句中指定相關(guān)的表,在WHERE子句中加入關(guān)聯(lián)條件; 而對(duì)于oracle,多表關(guān)聯(lián)update復(fù)雜一些,oracle不支持from子句,即不支持update from語(yǔ)法 |
|
1.9. 插入更新
SQL用法: 對(duì)于已經(jīng)存在的記錄進(jìn)行更新,對(duì)于新的記錄插入 |
|
ORACLE |
HANA |
merge into |
UPSERT T( key ,val) VALUES (1, 9) WHERE KEY = 1 ; UPSERT T( key ,val) VALUES (1, 8) WITH PRIMARY KEY ; |
對(duì)比說(shuō)明: Oracle的merge into從9i就存在,可以對(duì)存在的記錄進(jìn)行更新,對(duì)于新的記錄插入,避免proc中條件判斷的低效率,相關(guān)信息可以自行baidu; Hana的upsert可以對(duì)存在的記錄進(jìn)行更新,對(duì)于新的記錄插入,在列出的字段中,必須包含所有的主鍵字段,需要注意的是,upsert不是標(biāo)準(zhǔn)的sql語(yǔ)句,在各個(gè)數(shù)據(jù)庫(kù)中不同 |
|
1.10. 多表關(guān)聯(lián)插入更新
SQL用法: 關(guān)聯(lián)其他數(shù)據(jù)表數(shù)據(jù),對(duì)于已經(jīng)存在的記錄進(jìn)行更新,對(duì)于新的記錄插入 |
|
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' |
對(duì)比說(shuō)明: Oracle的merge into從9i就存在,可以對(duì)存在的記錄進(jìn)行更新,對(duì)于新的記錄插入,避免proc中條件判斷的低效率,相關(guān)信息可以自行baidu; Hana的upsert可以對(duì)存在的記錄進(jìn)行更新,對(duì)于新的記錄插入,在列出的字段中,必須包含所有的主鍵字段,多表關(guān)聯(lián)時(shí),比較類似insert語(yǔ)法 需要注意的是,upsert不是標(biāo)準(zhǔn)的sql語(yǔ)句,在各個(gè)數(shù)據(jù)庫(kù)中不同 |
|
1.11. like搜索
SQL用法: 用like進(jìn)行模糊搜索 |
|
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_' |
對(duì)比說(shuō)明: like數(shù)據(jù)表語(yǔ)句一致,可以用%或是_進(jìn)行匹配 |
|
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 |
對(duì)比說(shuō)明: case when使用同oracle一樣, |
|
1.13. 多表關(guān)聯(lián)
SQL用法: 2個(gè)及以上數(shù)據(jù)表關(guān)聯(lián)查詢 |
|
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 |
對(duì)比說(shuō)明: 寫法一樣 |
|
1.14. 外關(guān)聯(lián)
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' |
對(duì)比說(shuō)明: 寫法一樣,另外說(shuō)明Oracle有一種(+)的外關(guān)聯(lián)寫法,不推薦這種方式 |
|
1.15. 當(dāng)前時(shí)間1天后
SQL用法: 外連接查詢 |
|
ORACLE |
HANA |
select sysdate+1 from dual t |
select ADD_DAYS( CURRENT_TIMESTAMP ,1) from dummy |
對(duì)比說(shuō)明: 在hana中,日期時(shí)間不能加減number,只能通過(guò)日期時(shí)間函數(shù) |
|
當(dāng)前時(shí)間1個(gè)月后
SQL用法: 外連接查詢 |
|
ORACLE |
HANA |
select add_months(sysdate,1) from dual t |
select ADD_ MONTH S( CURRENT_TIMESTAMP ,1) from dummy |
對(duì)比說(shuō)明: 在hana中,日期時(shí)間不能加減number,只能通過(guò)日期時(shí)間函數(shù) |
|
1.16. 返回?cái)?shù)據(jù)集的前幾個(gè)記錄
SQL用法: 用于返回sql查詢數(shù)據(jù)集的前幾個(gè)記錄 |
|
ORACLE |
HANA |
select * from dual t where rownum<=10 and rownum>=5 |
select * from "TB" . "TF_RPT_HN_STAT_BSHZQK" t where t.issue= '2013-12' limit 10 offset 5 |
對(duì)比說(shuō)明: 在oracle中,是通過(guò)其內(nèi)置的rownum字段進(jìn)行記錄集的截??;在hana中,是通過(guò)limit子句進(jìn)行 |
|
1.17. 全球唯一標(biāo)識(shí)符
SQL用法: 返回全球唯一的標(biāo)識(shí)符,常用于寫主鍵值 |
|
ORACLE |
HANA |
select sys_guid () from dual ; |
select SYSUUID from dummy ; |
對(duì)比說(shuō)明: Hana與oracle中都是通過(guò)函數(shù)實(shí)現(xiàn)返回全球唯一的標(biāo)識(shí)符,生成一個(gè)16字節(jié)的原始值,每個(gè)字節(jié)2個(gè)16進(jìn)制顯示位,即可認(rèn)為是32位長(zhǎng)度的字符串, 該標(biāo)識(shí)符主要是用于數(shù)據(jù)表主鍵字段的取值,避免seq的序列值,同時(shí)對(duì)數(shù)據(jù)表數(shù)據(jù)的合并時(shí)很有用。 |
|
1.18. 計(jì)算累計(jì)partition by
SQL用法: 計(jì)算累計(jì) |
|
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' |
對(duì)比說(shuō)明: Hana與oracle的計(jì)算累計(jì)sql是一致的,同時(shí)其他的聚合函數(shù),如max、min、avg等都支持partition by |
|
2. 數(shù)據(jù)類型對(duì)比
2.1. 日期時(shí)間類型
2.1.1. DATE
ORACLE |
HANA |
DATE |
DATE |
可用的日期范圍從BC4712年1月1日至AC9999年12月31日 數(shù)據(jù)包含世紀(jì)、年份、月、日、時(shí)、分、秒信息,最小時(shí)間粒度是秒 默認(rèn)格式為“YYYY-MM-DD” |
時(shí)間值的范圍從 0001-01-01 至 9999-12-31 DATE 數(shù)據(jù)類型由年、月、日信息組成,表示一個(gè)日期值,最小時(shí)間粒度為日 DATA 類型的默認(rèn)格式為 ‘YYYY - MM-DD’ 。 YYYY 表示年, MM 表示月而 DD 表示日。 |
對(duì)比說(shuō)明: 雖然在Oracle和Hana中都有DATE數(shù)據(jù)類型,但是需要注意的是在HANA中,date只表示日期,即數(shù)據(jù)精度為日,這一點(diǎn)與Oracle中的date有很大不同 |
|
2.1.2. TIME
ORACLE |
HANA |
無(wú) |
TIME |
|
TIME 數(shù)據(jù)類型由小時(shí)、分鐘、秒信息組成,表示一個(gè)時(shí)間值。 TIME 類型的默認(rèn)格式為 ‘HH24:MI:SS’ 。 HH24 表示從 0 至 24 的小時(shí)數(shù), MI 代表 0 至 59 的分鐘值而 SS 表示 0 至 59 的秒 |
對(duì)比說(shuō)明: HANA中的time類型表示時(shí)間,而Oracle中沒(méi)有對(duì)應(yīng)的類型 |
|
2.1.3. SECONDDATE
ORACLE |
HANA |
DATE |
SECONDDATE |
|
TIME 數(shù)據(jù)類型由小時(shí)、分鐘、秒信息組成,表示一個(gè)時(shí)間值。 TIME 類型的默認(rèn)格式為 ‘HH24:MI:SS’ 。 HH24 表示從 0 至 24 的小時(shí)數(shù), MI 代表 0 至 59 的分鐘值而 SS 表示 0 至 59 的秒 |
對(duì)比說(shuō)明: HANA中的SECONDDATE表示日期時(shí)間,與oracle中的date相同,只是可用時(shí)間范圍不同 |
|
2.1.4. Timestamp
ORACLE |
HANA |
TIMESTAMP |
TIMESTAMP |
TIMESTAMP 數(shù)據(jù)類型由日期和時(shí)間信息組成。其默認(rèn)格式為 ‘YYYY-MM-DD HH24:MI:SS.FF 6 ’ 其中精度位為0至9 |
TIMESTAMP 數(shù)據(jù)類型由日期和時(shí)間信息組成。其默認(rèn)格式為 ‘YYYY-MM-DD HH24:MI:SS.FF7’ 。 FFn 代表含有小數(shù)的秒,其中 n 表示小數(shù)部分的數(shù)字位數(shù)。時(shí)間戳的范圍從 0001-01-01 00:00:00.0000000 至 9999-12-31 23:59:59.9999999 其中精度位為1至7 |
對(duì)比說(shuō)明: ORACLE與HANA中的TIMESTAMP表示日期時(shí)間,以及表示精度的小數(shù)位秒,Oracle默認(rèn)精度為0.000001秒,HANA默認(rèn)精度為0.0000001秒 |
|
2.2. 數(shù)字類型
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) 數(shù)據(jù)類型指定了一個(gè)精度為 p 小數(shù)位數(shù)為 s 的定點(diǎn)小數(shù)。精度是有效位數(shù)的總數(shù),范圍從 1 至 34 。 小數(shù)位數(shù)是從小數(shù)點(diǎn)到最小有效數(shù)字的數(shù)字個(gè)數(shù),范圍從 -6,111 到 6,176 ,這表示位數(shù)指定了十進(jìn)制小數(shù)的指數(shù)范圍從 10 -6111 至 10 6176 。如果沒(méi)有指定小數(shù)位數(shù),則默認(rèn)值為 。 當(dāng)數(shù)字的有效數(shù)字在小數(shù)點(diǎn)的右側(cè)時(shí),小數(shù)位數(shù)為正;有效數(shù)字在小數(shù)點(diǎn)左側(cè)時(shí),小數(shù)位數(shù)為負(fù)。 |
對(duì)比說(shuō)明: ORACLE中的number與HANA中的decimal是基本一致的,在精度和小數(shù)位數(shù)的范圍上有所不同 |
|
2.3. 字符類型
2.3.1. VARCHAR2
ORACLE |
HANA |
VARCHAR2 |
VARCHAR |
varchar2 存放字符數(shù)據(jù)最大長(zhǎng)度為4000字節(jié) varchar2把一般情況下所有字符都占兩字節(jié)處理 VARCHAR2把空串等同于null處理 VARCHAR2字符要用幾個(gè)字節(jié)存儲(chǔ),要看數(shù)據(jù)庫(kù)使用的字符集 |
VARCHAR (n) 數(shù)據(jù)類型定義了一個(gè)可變長(zhǎng)度的 ASCII 字符串, n 表示最大長(zhǎng)度,是一個(gè) 1 至 5000 的整數(shù)值 |
對(duì)比說(shuō)明: ORACLE中的varchar2與HANA中的varchar是基本一致的,在最大長(zhǎng)度上有所區(qū)別 |
|
2.3.2. NVARCHAR
ORACLE |
HANA |
NVARCHAR2 |
NVARCHAR |
nvarchar2用于存儲(chǔ)可變長(zhǎng)度的字符串,size 的最大值是 4000,而最小值是 1,其值表示字符的個(gè)數(shù),而不是字節(jié)數(shù) |
NVARCHAR (n) 數(shù)據(jù)類型定義了一個(gè)可變長(zhǎng)度的 Unicode 字符串, n 表示最大長(zhǎng)度,是一個(gè) 1 至 5000 的整數(shù)值 |
對(duì)比說(shuō)明: ORACLE中的nvarchar2與HANA中的nvarchar是基本一致的,在最大長(zhǎng)度上有所區(qū)別 |
|
2.4. 大對(duì)象類型
2.4.1. BLOB
ORACLE |
HANA |
CLOB |
CLOB |
可用來(lái)存儲(chǔ)無(wú)結(jié)構(gòu)的二進(jìn)制數(shù)據(jù) 最大長(zhǎng)度是4GB |
BLOB 數(shù)據(jù)類型用來(lái)存儲(chǔ)大二進(jìn)制數(shù)據(jù) 最大大小為 2GB |
對(duì)比說(shuō)明: ORACLE和HANA中的BLOB是基本一致的,在最大大小上有所區(qū)別 |
|
2.4.2. CLOB
ORACLE |
HANA |
CLOB |
CLOB |
用于存儲(chǔ)對(duì)應(yīng)于數(shù)據(jù)庫(kù)定義的字符集的字符數(shù)據(jù) 最大長(zhǎng)度是4GB |
CLOB 數(shù)據(jù)類型用來(lái)存儲(chǔ)大 ASCII 字符數(shù)據(jù) 最大大小為 2GB |
對(duì)比說(shuō)明: ORACLE和HANA中的CLOB是基本一致的,在最大大小上有所區(qū)別 |
|
2.4.3. NCLOB
ORACLE |
HANA |
NCLOB |
NCLOB |
用來(lái)存儲(chǔ)定寬多字節(jié)字符數(shù)據(jù),保存本地語(yǔ)言字符集數(shù)據(jù)最大長(zhǎng)度是4GB |
NCLOB 數(shù)據(jù)類型用來(lái)存儲(chǔ)大 Unicode 字符對(duì)象 最大大小為 2GB |
對(duì)比說(shuō)明: ORACLE和HANA中的NCLOB是基本一致的,在最大大小上有所區(qū)別 |
|
2.4.4. TEXT
ORACLE |
HANA |
|
TEXT |
|
TEXT 數(shù)據(jù)類型指定支持文本搜索功能,這不是一個(gè)獨(dú)立的 SQL 類型。選擇一列 TEXT 列會(huì)生成一個(gè) NCLOB 類型的列 |
對(duì)比說(shuō)明: TEXT是HANA所特有的數(shù)據(jù)類型,是為了滿足其非結(jié)構(gòu)化數(shù)據(jù)分析的需要,Oracle中沒(méi)有相應(yīng)的數(shù)據(jù)類型 |
|
3. SQL函數(shù)
3.1. 數(shù)據(jù)類型轉(zhuǎn)換函數(shù)
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. |
用來(lái)把參數(shù)從一個(gè)數(shù)據(jù)類型轉(zhuǎn)換為另一個(gè)數(shù)據(jù)類型,或者測(cè)試轉(zhuǎn)換是否可行 |
select CAST (111 AS DATE ) FROM DUAL 執(zhí)行出錯(cuò) |
select CAST (111 AS DATE ) FROM DUMMY |
對(duì)比說(shuō)明: CAST在oracle和hana中功能是一致的,只是在轉(zhuǎn)換類型方面有所差距,比如,oracle中number不能轉(zhuǎn)換成date,而hana中可以 |
|
3.1.2. TO_ALPHANUM
ORACLE |
HANA |
|
TO_ALPHANUM |
|
TO_ALPHANUM (value) |
|
將給定的 value 轉(zhuǎn)換為 ALPHANUM 數(shù)據(jù)類型。 |
|
SELECT TO_ALPHANUM ( '10' ) "to alphanum" FROM DUMMY ; |
對(duì)比說(shuō)明: ALPHANUM是可變長(zhǎng)度的包含字母數(shù)字的字符串,在實(shí)際應(yīng)用中很少使用,故該轉(zhuǎn)換函數(shù)TO_ALPHANUM也很少使用 |
|
3.1.3. TO_BIGINT
ORACLE |
HANA |
|
TO_BIGINT |
|
TO_BIGINT (value) |
|
將 value 轉(zhuǎn)換為 BIGINT 類型 |
|
SELECT TO_BIGINT ( '10' ) "to bigint" FROM DUMMY ; |
對(duì)比說(shuō)明: BIGINT是64位有符號(hào)整數(shù),Oracle中一般使用number類型,沒(méi)有對(duì)應(yīng)轉(zhuǎn)換函數(shù) |
|
3.1.4. TO_BINARY
ORACLE |
HANA |
|
TO_BINARY |
|
TO_BINARY (value) |
|
將 value 轉(zhuǎn)換為 BINARY 類型 |
|
SELECT TO_BINARY ( 'abc' ) "to binary" FROM DUMMY ; |
對(duì)比說(shuō)明: BINARY是二進(jìn)制數(shù)據(jù),Oracle沒(méi)有對(duì)應(yīng)轉(zhuǎn)換函數(shù) |
|
3.1.5. TO_BLOB
ORACLE |
HANA |
TO_BLOB |
TO_BLOB |
TO_BLOB (value) |
TO_BLOB (value) |
將 value 轉(zhuǎn)換為 BLOB 類型。參數(shù)值 LONG RAW 或 RAW 類型的數(shù)據(jù),輸出的是 BLOB 值 ,LONG RAW、RAW類型 相當(dāng)于其他編程語(yǔ)音中的bin類型數(shù)據(jù) ,即二進(jìn)制數(shù)據(jù) |
將 value 轉(zhuǎn)換為 BLOB 類型。參數(shù)值必須是二進(jìn)制字符串,即VARBINARY類型 |
SELECT TO_BLOB ( CAST ( 'abcde' AS RAW)) "to blob" FROM DUMMY ; |
SELECT TO_BLOB (TO_BINARY( 'abcde' )) "to blob" FROM DUMMY ; |
對(duì)比說(shuō)明: 在oracle和hana中都有TO_BLOB函數(shù),轉(zhuǎn)換功能基本一樣,但是Oracle中的TO_BLOB函數(shù)在11g才有,之前8i到10g,只有TO_LOB函數(shù) |
|
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 轉(zhuǎn)換為 CHAR 類型。如果省略 format 關(guān)鍵字,轉(zhuǎn)換將會(huì)使用 Date Formats 中說(shuō)明的日期格式模型 |
|
SELECT TO_CHAR (TO_DATE( '2009-12-31' ), 'YYYY/MM/DD' ) "to char" FROM DUMMY ; |
對(duì)比說(shuō)明: 在oracle和hana中都有TO_CHAR函數(shù),轉(zhuǎn)換功能基本一樣。不同之處在于,hana的to_char是轉(zhuǎn)化為char類型,而oracle的to_char則是轉(zhuǎn)化為varchar2類型,并且字符編碼是基于數(shù)據(jù)庫(kù)字符集 |
|
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 轉(zhuǎn)換為 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 ; |
對(duì)比說(shuō)明: 在oracle和hana中都有TO_CLOB函數(shù),轉(zhuǎn)換功能基本一樣,但是Oracle中的TO_BLOB函數(shù)在10g才有,之前8i到9i,只有TO_LOB函數(shù) |
|
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 轉(zhuǎn)換為 DATE 數(shù)據(jù)類型。如果省略 format 關(guān)鍵字,轉(zhuǎn)換將會(huì)使用 Date Formats 中說(shuō)明的日期格式模型。 |
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 ; |
對(duì)比說(shuō)明: 在oracle和hana中都有TO_DATE函數(shù),但是轉(zhuǎn)換功能有一點(diǎn)不同,hana的to_date只能轉(zhuǎn)換成日期,即hana的date類型,只包含年月日,而oracle的to_date是轉(zhuǎn)換為oracle的date類型,包含年月日時(shí)分秒 |
|
4.2.9. TO_DATS
ORACLE |
HANA |
|
TO_DATS |
|
TO_DATS (d) |
|
將字符串 d 轉(zhuǎn)換為 ABAP 日期字符串,格式為 ”YYYYMMDD” |
|
SELECT TO_DATS ( '2010-01-12' ) "abap date" FROM DUMMY ; |
對(duì)比說(shuō)明: 該轉(zhuǎn)換函數(shù)是HANA所特有的,用于轉(zhuǎn)換為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 轉(zhuǎn)換為 DECIMAL 類型。 |
SELECT
TO_NUMBER(
'-AusDollars100'
,
'L9G999D99'
,
NLS_CURRENCY = ''AusDollars'' ' ) "Amount" FROM DUAL ; |
SELECT TO_DECIMAL (7654321.888888, 10, 3) "to decimal" FROM DUMMY ; |
對(duì)比說(shuō)明: HANA的to_decimal與ORACLE的to_number在功能上基本一致,都能將字符串轉(zhuǎn)換為數(shù)字類型;在參數(shù)上有所區(qū)別,hana的to_decimal的參數(shù)還包括數(shù)字的精度和小數(shù)位,而Oracle的to_number的參數(shù)包括數(shù)字格式,以及nlsparam參數(shù) |
|
4.2.11. TO_DOUBLE
ORACLE |
HANA |
|
TO_DOUBLE |
|
TO_DOUBLE (value) |
|
將 value 轉(zhuǎn)換為 DOUBLE (雙精度)數(shù)據(jù)類型。 |
|
SELECT 3*TO_DOUBLE ( '15.12' ) "to double" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.12. TO_INT
ORACLE |
HANA |
|
TO_INT |
|
TO_INTEGER (value) |
|
將 value 轉(zhuǎn)換為 INTEGER 類型。 |
|
SELECT TO_INT( '10' ) "to int" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.13. TO_INTEGER
ORACLE |
HANA |
|
TO_INTEGER |
|
TO_INT EGER (value) |
|
將 value 轉(zhuǎn)換為 INTEGER 類型。 |
|
SELECT TO_INT EGER ( '10' ) "to int eger " FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.14. TO_NCHAR
ORACLE |
HANA |
|
TO_NCHAR |
|
TO_NCHAR (value [, format]) |
|
將 value 轉(zhuǎn)換為 NCHAR Unicode 字符類型。如果省略 format 關(guān)鍵字,轉(zhuǎn)換將會(huì)使用 Date Formats 中說(shuō)明的日期格式模型。 |
|
SELECT TO_NCHAR (TO_DATE( '2009-12-31' ), 'YYYY/MM/DD' ) "to nchar" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.15. TO_NCLOB
ORACLE |
HANA |
TO_NCLOB |
TO_NCLOB |
TO_NCLOB ( lob_column | char ) |
TO_NCLOB (value) |
TO_NCLOB converts 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 轉(zhuǎn)換為 NCLOB 數(shù)據(jù)類型。 |
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 ; |
對(duì)比說(shuō)明: 功能基本一致,其中Oracle的TO_NCLOB還會(huì)將value的字符集轉(zhuǎn)換為本地字符集 |
|
4.2.16. TO_NVARCHAR
ORACLE |
HANA |
|
TO_NVARCHAR |
|
TO_NVARCHAR (value [,format]) |
|
將 value 轉(zhuǎn)換為 NVARCHAR Unicode 字符類型。如果省略 format 關(guān)鍵字,轉(zhuǎn)換將會(huì)使用 Date Formats 中說(shuō)明的日期格式模型。 |
|
SELECT TO_NVARCHAR(TO_DATE( '2009/12/31' ), 'YY-MM-DD' ) "to nchar" FROM DUMMY ; |
對(duì)比說(shuō)明: Hana的中to_nvarchar是將value轉(zhuǎn)化為unicode字符的NVARCHAR類型,功能都是轉(zhuǎn)化為字符串,只是字符集不同,而Oracle中to_char函數(shù)統(tǒng)一實(shí)現(xiàn)該功能,通過(guò)nlsparam參數(shù)實(shí)現(xiàn)字符集的定義 |
|
4.2.17. TO_REAL
ORACLE |
HANA |
|
TO_REAL |
|
TO_REAL (value) |
|
將 value 轉(zhuǎn)換為實(shí)數(shù)(單精度)數(shù)據(jù)類型。 |
|
SELECT 3*TO_REAL ('15.12') "to real" FROM DUMMY; |
對(duì)比說(shuō)明: |
|
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 轉(zhuǎn)換為 SECONDDATE 類型。如果省略 format 關(guān)鍵字,轉(zhuǎn)換將會(huì)使用 Date Formats 中說(shuō)明的日期格式模型 |
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 ; |
對(duì)比說(shuō)明: HANA中有幾種日期時(shí)間類型,也分別對(duì)應(yīng)3種轉(zhuǎn)換函數(shù),該轉(zhuǎn)換函數(shù)to_seconddate是最接近Oracle的to_date,在具體使用時(shí),注意甄別 |
|
4.2.19. TO_SMALLDECIMAL
ORACLE |
HANA |
|
TO_SMALLDECIMAL |
|
TO_SMALLDECIMAL (value) |
|
將 value 轉(zhuǎn)換為 SMALLDECIMAL 類型。 |
|
SELECT TO_SMALLDECIMAL(7654321.89) "to smalldecimal" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.20. TO_SMALLINT
ORACLE |
HANA |
|
TO_SMALLINT |
|
TO_SMALL INT (value) |
|
將 value 轉(zhuǎn)換為 SMALLINT 類型。 |
|
SELECT TO_SMALLINT ( '10' ) "to smallint" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.21. TO_TIME
ORACLE |
HANA |
|
TO_TIME |
|
TO_TIME (t [, format]) |
|
將時(shí)間字符串 t 轉(zhuǎn)換為 TIME 類型。如果省略 format 關(guān)鍵字,轉(zhuǎn)換將會(huì)使用 Date Formats 中說(shuō)明的日期格式模型 |
|
SELECT TO_TIME ( '08:30 AM' , 'HH:MI AM' ) "to time" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.22. TO_TIMESTAMP
ORACLE |
HANA |
|
TO_TIMESTAMP |
|
TO_TIMESTAMP (d [, format]) |
|
將時(shí)間字符串 t 轉(zhuǎn)換為 TIMESTAMP 類型。如果省略 format 關(guān)鍵字,轉(zhuǎn)換將會(huì)使用 Date Formats 中說(shuō)明的日期格式模型。 |
|
SELECT TO_TIMESTAMP ( '2010-01-11 13:30:00' , 'YYYY-MM-DD HH24:MI:SS' ) "to timestamp" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.23. TO_TINYINT
ORACLE |
HANA |
|
TO_TINYINT |
|
TO_TINYINT (value) |
|
將 value 轉(zhuǎn)換為 TINYINT 類型。 |
|
SELECT TO_TINYINT ( '10' ) "to tinyint" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.2.24. TO_VARCHAR
ORACLE |
HANA |
TO_CHAR |
TO_VARCHAR |
TO_ CHAR (value) |
TO_VARCHAR (value [, format]) |
|
將給定 value 轉(zhuǎn)換為 VARCHAR 字符串類型。如果省略 format 關(guān)鍵字,轉(zhuǎn)換將會(huì)使用 Date Formats 中說(shuō)明的日期格式模型。 |
|
SELECT TO_VARCHAR (TO_DATE( '2009-12-31' ), 'YYYY/MM/DD' ) "to char" FROM DUMMY ; |
對(duì)比說(shuō)明: HANA中的to_varchar與Oracle的to_char基本相關(guān),都是將數(shù)字型、時(shí)間日期型數(shù)據(jù)轉(zhuǎn)換為varchar(varchar2)類型 |
|
4.3. 日期時(shí)間函數(shù)
4.3.1. ADD_DAYS
ORACLE |
HANA |
|
ADD_DAYS |
|
ADD_DAYS (d, n) |
|
計(jì)算日期 d 后 n 天的值 |
|
SELECT ADD_DAYS (TO_DATE ( '2009-12-05' , 'YYYY-MM-DD' ), 30) "add days" FROM DUMMY ; |
對(duì)比說(shuō)明: Oracle中沒(méi)有對(duì)應(yīng)的函數(shù),只是在oracle中,date類型可以直接+-number,實(shí)現(xiàn)同樣功能;HANA中該函數(shù)可以用于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 個(gè)月的日期,如果日期d是月末、或是結(jié)果日期所在月天數(shù)較少,少于日期 d 的日期數(shù),結(jié)果將返回結(jié)果月份的月末日期。 |
計(jì)算日期 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 |
對(duì)比說(shuō)明: Hana與oracle中的該函數(shù)功能一樣,HANA中該函數(shù)可以用于date、seconddate類型 |
|
4.3.3. ADD_SECONDS
ORACLE |
HANA |
|
ADD_SECONDS |
|
ADD_SECONDS (t, n) |
|
計(jì)算時(shí)間 t 后 n 秒的值。 |
|
SELECT ADD_SECONDS (TO_TIMESTAMP ( '2012-01-01 23:30:45' ), 60*30) "add seconds" FROM DUMMY ; |
對(duì)比說(shuō)明: Oracle中沒(méi)有對(duì)應(yīng)的函數(shù),只是在oracle中,date類型可以直接+-number,實(shí)現(xiàn)同樣功能;HANA中該函數(shù)可以用于time、timestamp、seconddate類型,并且time、timestamp、seconddate不能加減number |
|
4.3.4. ADD_YEARS
ORACLE |
HANA |
|
ADD_YEARS |
|
ADD_YEARS (d, n) |
|
計(jì)算日期 d 后 n 年的值。 |
|
SELECT ADD_YEARS (TO_DATE ( '2009-12-05' , 'YYYY-MM-DD' ), 1) "add years" FROM DUMMY ; |
對(duì)比說(shuō)明: |
|
4.3.5. CURRENT_DATE
ORACLE |
HANA |
SYSDATE |
CURRENT_DATE |
S ysdate |
CURRENT_DATE |
返回當(dāng)前本地系統(tǒng)日期時(shí)間。 |
返回當(dāng)前本地系統(tǒng)日期。 |
SELECT SYSDATE FROM DUMMY ; |
SELECT CURRENT_DATE "current date" FROM DUMMY ; |
對(duì)比說(shuō)明: HANA的CURRENT_TIME與oracle的SYSDATE功能基本一致,但是hana的該函數(shù)只是返回日期 |
|
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. 數(shù)字函數(shù)
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. 字符串函數(shù)
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. 雜項(xiàng)函數(shù)
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
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。