中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HANA SQL參考及Oracle對照

發布時間:2020-08-10 15:25:46 來源:ITPUB博客 閱讀:517 作者:Tybyq 欄目:大數據

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<=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  表示從 24  的小時數, MI  代表 59  的分鐘值而 SS  表示 59 的秒

對比說明:

HANA中的time類型表示時間,而Oracle中沒有對應的類型


2.1.3. SECONDDATE

ORACLE

HANA

DATE

SECONDDATE


TIME  數據類型由小時、分鐘、秒信息組成,表示一個時間值。

TIME  類型的默認格式為 ‘HH24:MI:SS’ HH24  表示從 24  的小時數, MI  代表 59  的分鐘值而 SS  表示 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  代表含有小數的秒,其中 表示小數部分的數字位數。時間戳的范圍從 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)  數據類型指定了一個精度為 小數位數為 的定點小數。精度是有效位數的總數,范圍從 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  字符串, 表示最大長度,是一個 5000  的整數值

對比說明:

ORACLE中的varchar2與HANA中的varchar是基本一致的,在最大長度上有所區別


2.3.2. NVARCHAR

ORACLE

HANA

NVARCHAR2

NVARCHAR

nvarchar2用于存儲可變長度的字符串,size 的最大值是 4000,而最小值是 1,其值表示字符的個數,而不是字節數

NVARCHAR (n)  數據類型定義了一個可變長度的 Unicode  字符串, 表示最大長度,是一個 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

將日期字符串 轉換為 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)


將字符串 轉換為 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  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_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])


將時間字符串 轉換為 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])


將時間字符串 轉換為 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)


計算日期 天的值


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 的日期數,結果將返回結果月份的月末日期。

計算日期 月的值。

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)


計算時間 秒的值。


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)


計算日期 年的值。


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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白山市| 桂平市| 盱眙县| 革吉县| 嘉祥县| 思南县| 平原县| 奉新县| 古田县| 大化| 雷州市| 茌平县| 永丰县| 正蓝旗| 宁强县| 鹤峰县| 大同市| 永定县| 仁布县| 尖扎县| 齐齐哈尔市| 泊头市| 旌德县| 北海市| 碌曲县| 高淳县| 绥化市| 鄂州市| 化州市| 新野县| 上栗县| 巴彦淖尔市| 石棉县| 泌阳县| 仙居县| 托里县| 吴忠市| 湛江市| 德惠市| 达孜县| 高青县|