国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

Oracle和SQL Server淺析

2024-08-31 00:52:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  T-SQL是SQL Server的語(yǔ)言引擎,而Oracle的語(yǔ)言引擎卻是PL/SQL。這兩種查詢語(yǔ)言都對(duì)ANSI SQL-92標(biāo)準(zhǔn)進(jìn)行了擴(kuò)展以提供額外的支持力度。你所創(chuàng)建的應(yīng)用程序幾乎都要用到這些補(bǔ)充特性。 本文就對(duì)最常用的、非標(biāo)準(zhǔn)的Oracle擴(kuò)展進(jìn)行了說(shuō)明,同時(shí)還要介紹了如何對(duì)這些擴(kuò)展進(jìn)行轉(zhuǎn)化以用在SQL Server環(huán)境下。
  
  列的選擇
  
  用PL/SQL執(zhí)行數(shù)據(jù)查詢的時(shí)候,F(xiàn)ROM子句是必須的,這同SQL Server的要求一樣。SELECT語(yǔ)句必須選擇針對(duì)的數(shù)據(jù)表。在Oracle數(shù)據(jù)庫(kù)內(nèi)有一種非凡的表Dual。Dual表是Oracle中的一個(gè)實(shí)際存在的表,任何用戶均可讀取,常用在沒(méi)有目標(biāo)表的Select中。Dual表由Oracle連同數(shù)據(jù)字典一同創(chuàng)建,所有的用戶都可以用名稱DUAL訪問(wèn)該表。這個(gè)表里只有一列DUMMY,該列定義為VARCHAR2(1)類型,有一行值X。從DUAL表選擇數(shù)據(jù)常被用來(lái)通過(guò)SELECT語(yǔ)句計(jì)算常數(shù)表達(dá)式,由于DUAL只有一行數(shù)據(jù),所以常數(shù)只返回一次。
  
  Oracle下的DUAL查詢?nèi)缦滤荆?br />  
  SELECT 'x' FROM dual
  
  而對(duì)等的SQL Server查詢則是下面這個(gè)樣子:
  
  SELECT 'x'
  
  以下是null相關(guān)的知識(shí),用到了dual:
  
  SQL> select 1 from dual where null=null;
  
  沒(méi)有查到記錄
  
  SQL> select 1 from dual where null='';
  
  沒(méi)有查到記錄
  
  SQL> select 1 from dual where ''='';
  
  沒(méi)有查到記錄
  
  SQL> select 1 from dual where null is null;
  
  1
  ---------
  1
  
  SQL> select 1 from dual where nvl(null,0)=nvl(null,0);
  
  1
  ---------
  1
  
  查看當(dāng)前連接用戶
  
  SQL> select user from dual;
  
  查看當(dāng)前日期、時(shí)間
  
  SQL> select sysdate from dual;
  
  連接
  
  Oracle用符號(hào)作為連接符,而SQL Server的連接符是加號(hào):+ 。
  
  Oracle查詢?nèi)缦滤荆?br />  
  Select 'Name' 'Last Name' From tableName
  
  對(duì)應(yīng)的SQL Server查詢?nèi)缦滤荆?br />  
  Select 'Name' + 'Last Name'
  
  數(shù)字取舍
  
  Oracle數(shù)據(jù)庫(kù)內(nèi)有一個(gè)TRUNC函數(shù),該函數(shù)返回m位十進(jìn)制數(shù)的n位;假如省略m則n就是0位。m的值可以為負(fù),表示截去小數(shù)點(diǎn)左邊m位數(shù)字。
  
  在SQL Server下可以用Round或者Floor。
  
  以下是Oracle查詢:
  
  SELECT TRUNC(15.79, 1) "Truncate" FROM DUAL;
  
  下面是同類查詢的SQL Server版本:
  
  SELECT ROUND(15.79, 0) rounded , ROUND(15.79, 0,1) truncated
  
  SELECT FLOOR(ROUND(15.79, 0)), FLOOR(ROUND(15.79, 0,1) )
  
  數(shù)字轉(zhuǎn)換
  
  Oracle的TO_CHAR函數(shù)可以把n位NUMBER數(shù)據(jù)類型轉(zhuǎn)換為VARCHAR2數(shù)據(jù)類型,同時(shí)采用可選的數(shù)字格式。
  
  SQL Server則通過(guò)STR函數(shù)返回?cái)?shù)字轉(zhuǎn)換之后的字符數(shù)據(jù)。不過(guò),該函數(shù)不具方便的Format參數(shù)。
  
  Oracle查詢?nèi)缦拢?br />  
  SELECT to_char(123.45, 99999999999999) from tab
  
  SELECT to_char(EXPIRY_DATE, 'DDMONYYYY') from tab
  
  以下是SQL Server版本的查詢:
  
  SELECT STR(123.45, 14)
  
  SELECT STR(round(123.455 , 2), 12, 2)
  
  SELECT CAST(REPLACE((CONVERT(varchar(12) , EXPIRYDATE, 106 )), '' , '') as varchar(9))
  
  LENGTH和LEN
  
  以下是Oracle的查詢:
  
  SELECT LENGTH('SQLMAG') "Length in characters" FROM DUAL;
  
  以上查詢?cè)赟QL Server下是這樣寫的:
  
  SELECT LEN('SQLMAG') "Length in characters"
  
  日期
  
  以上兩種系統(tǒng)都具有各自的當(dāng)前日期和時(shí)間格式。

  
  Oracle取得日期和采用如下方式:
  
  SYSDATE
  
  SQL Server則是這樣的:
  
  GETDATE()
  
  你可以用各種語(yǔ)法操作日期。以下的代碼對(duì)Oracle日期值中的月份進(jìn)行了格式調(diào)整(返回日期再加上n月):
  
  Select add_months(sysdate, 12) from dual
  
  SQL Server則是如下完成同等功能的:
  
  Select dateadd(mm, 12, getdate())
  
  數(shù)據(jù)的減法
  
  以下代碼在Oracle中直接對(duì)數(shù)據(jù)進(jìn)行減法操作:
  
  SELECT sysdate -add_months(sysdate, 12) FROM dual
  
  SQL Server則是這樣做的:
  
  SELECT datediff(dd, GetDate(), dateadd(mm, 12, getdate()))

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 瑞昌市| 绥滨县| 青川县| 南和县| 隆化县| 晋中市| 丹棱县| 无为县| 永福县| 囊谦县| 乌兰察布市| 桃园县| 丰顺县| 蒙阴县| 甘洛县| 城市| 台山市| 郸城县| 遂宁市| 咸宁市| 饶河县| 乐东| 鹤峰县| 伊宁市| 社旗县| 连南| 闵行区| 东至县| 霞浦县| 双流县| 离岛区| 黔东| 高雄县| 汽车| 米脂县| 长宁区| 福州市| 新蔡县| 宜黄县| 顺义区| 玉门市|