HANA SQL參考及Oracle對照git
在本部分中,主要參考了《SAP_HANA數據庫SQL參考手冊》,以及《ORACLE sql參考手冊》,針對咱們平常使用的sql方式、內置函數、關鍵字,進行了對比sql
1. 經常使用SQL寫法數據庫
1.1. 遞歸查詢express
SQL用法:編程 遞歸查詢用於查詢父子節點結構的數據表,造成樹狀結構的數據集,經常使用於菜單數據集、報表結構數據oracle |
|
ORACLE函數 |
HANA測試 |
select * fromui tf_rpt_hn_stat_bshzqk tthis where t.dept_id='10262200' start with t.dept_id='10000000' connect by prior t.dept_id=t.dept_mng_id order 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 order 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,0) from dual 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_MONTHS(CURRENT_TIMESTAMP,1) from dummy |
對比說明: 在hana中,日期時間不能加減number,只能經過日期時間函數 |
1.16. 返回數據集的前幾個記錄
SQL用法: 用於返回sql查詢數據集的前幾個記錄 |
|
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 |
對比說明: 在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.FF6’ 其中精度位爲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 至106176。若是沒有指定小數位數,則默認值爲0。 當數字的有效數字在小數點的右側時,小數位數爲正;有效數字在小數點左側時,小數位數爲負。 |
對比說明: 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_CLOB (value) |
TO_CLOB (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_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_INTEGER (value) |
|
將value 轉換爲INTEGER 類型。 |
|
SELECT TO_INTEGER('10') "to integer" 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 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 轉換爲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_SMALLINT (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 |
Sysdate |
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