博學而篤志,好問而近思

          Oracle 與 Sql Service 中SQL語句的不同之處 (推薦)

          ???????????????????????????? PL-SQL 與 T-SQL 的不同之處
          ????T-SQL是SQL Server的語言引擎,而Oracle的語言引擎卻是PLSQL。這兩種查詢語言都對ANSI SQL-92標準進行了擴展以提供額外的支持力度。你所創(chuàng)建的應用程序幾乎都要用到這些補充特性。本文就對最常用的、非標準的Oracle擴展進行了說明,同時還要介紹下如何對這些擴展進行轉(zhuǎn)化以用在SQL Server環(huán)境下。

          列的選擇

          ????用PLSQL執(zhí)行數(shù)據(jù)查詢的時候,F(xiàn)ROM子句是必須的,這同SQL Server的要求是一樣的。 SELECT語句必須選擇針對的數(shù)據(jù)表。在Oracle數(shù)據(jù)庫內(nèi)有一種特殊的表Dual。Dual表是Oracle中的一個實際存在的表,任何用戶均可讀取,常用在沒有目標表的Select中。Dual表由Oracle連同數(shù)據(jù)字典一同創(chuàng)建,所有的用戶都可以用名稱DUAL訪問該表。這個表里只有一列DUMMY,該列定義為VARCHAR2(1)類型,有一行值X。從DUAL表選擇數(shù)據(jù)常被用來通過SELECT語句計算常數(shù)表達式,由于DUAL只有一行數(shù)據(jù),所以常數(shù)只返回一次。

          ????Oracle下的DUAL查詢?nèi)缦滤荆?
          SELECT ‘x’ FROM dual
          而對等的SQL Server查詢則是下面這個樣子:
          SELECT ‘x’

          ????以下是null相關(guān)的知識,用到了dual:
          SQL> select 1 from dual where null=null;
          沒有查到記錄
          SQL> select 1 from dual where null='';
          沒有查到記錄
          SQL> select 1 from dual where ''='';
          沒有查到記錄
          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
          查看當前連接用戶
          SQL> select user from dual;

          查看當前日期、時間
          SQL> select sysdate from dual;

          連接

          Oracle用|| 符號作為連接符,而SQL Server的連接符是加號:+ 。

          Oracle查詢?nèi)缦滤荆?
          Select ‘Name’ || ‘Last Name’ From tableName

          對應的SQL Server查詢?nèi)缦滤荆?
          Select ‘Name’ + ‘Last Name’


          數(shù)字取舍

          ????Oracle數(shù)據(jù)庫內(nèi)有一個TRUNC函數(shù),該函數(shù)返回m位十進制數(shù)的n位;如果省略m則n就是0位。m的值可以為負,表示截去小數(shù)點左邊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ù)字格式。

          SQL Server則通過STR函數(shù)返回數(shù)字轉(zhuǎn)換之后的字符數(shù)據(jù)。不過,該函數(shù)不具方便的Format參數(shù)。

          ????Oracle查詢?nèi)缦拢?
          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;

          以上查詢在SQL Server下是這樣寫的:
          SELECT LEN('SQLMAG') "Length in characters"


          日期

          以上兩種系統(tǒng)都具有各自的當前日期和時間格式。

          Oracle取得日期和采用如下方式:
          SYSDATE

          SQL Server則是這樣的:
          GETDATE()

          你可以用各種語法操作日期。以下的代碼對Oracle日期值中的月份進行了格式調(diào)整(返回日期再加上n月):
          Select add_months(sysdate,12) from dual

          SQL Server則是如下完成同等功能的:
          Select dateadd(mm,12,getdate())

          數(shù)據(jù)的減法也不同。以下代碼在Oracle中直接對數(shù)據(jù)進行減法操作:
          SELECT sysdate -add_months(sysdate,12) FROM dual

          SQL Server則是這樣做的:
          SELECT datediff(dd, GetDate(),dateadd(mm,12,getdate()))

          posted on 2006-08-11 16:37 冰川 閱讀(964) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統(tǒng)計

          常用鏈接

          留言簿(14)

          隨筆檔案

          BlogJava的幫助

          朋友的博客

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          快樂工作—享受生活
          主站蜘蛛池模板: 兴国县| 安吉县| 安顺市| 岳阳县| 茶陵县| 抚远县| 垫江县| 木兰县| 普格县| 于田县| 黎城县| 清流县| 河南省| 成武县| 平顶山市| 科技| 开原市| 红桥区| 上思县| 镇江市| 辽阳市| 台南市| 紫金县| 铁岭市| 千阳县| 孝感市| 五原县| 石景山区| 石嘴山市| 彝良县| 黄石市| 敦煌市| 柳河县| 平塘县| 尼玛县| 兴海县| 乌拉特后旗| 海南省| 彰化市| 文化| 新源县|