<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Kimi's NutShell

    我荒廢的今日,正是昨日殞身之人祈求的明日

    BlogJava 新隨筆 管理
      141 Posts :: 0 Stories :: 75 Comments :: 0 Trackbacks

    T-SQL是SQL Server的語(yǔ)言引擎,而Oracle的語(yǔ)言引擎卻是PLSQL。這兩種查詢語(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)境下。

    列的選擇

    用PLSQL執(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)缦滤荆?
    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)缦滤荆?
    Select ‘Name’ || ‘Last Name’ From tableName

    對(duì)應(yīng)的SQL Server查詢?nèi)缦滤荆?
    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)缦拢?
    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()))

    posted on 2006-08-22 15:44 Kimi 閱讀(333) 評(píng)論(0)  編輯  收藏 所屬分類: Database
    主站蜘蛛池模板: 99精品免费观看| 美女被羞羞网站免费下载| 日韩免费在线视频| 亚洲精品乱码久久久久久中文字幕 | 日韩在线视频线视频免费网站| 国产精品成人无码免费| 国产精品亚洲va在线观看| 亚洲AV无码不卡在线观看下载| 一区二区三区免费高清视频| 亚洲尤码不卡AV麻豆| 99久久免费精品高清特色大片| 麻豆亚洲AV永久无码精品久久| 成人黄色免费网址| 亚洲精品无码专区在线播放| 四虎永久在线精品免费观看地址| 水蜜桃视频在线观看免费| 亚洲午夜国产精品无码| **一级一级毛片免费观看| 精品亚洲AV无码一区二区| 免费涩涩在线视频网| 亚欧乱色国产精品免费视频| 亚洲AV无码一区二区二三区软件 | 噜噜综合亚洲AV中文无码| 亚洲成av人片在线观看天堂无码| 成人无码区免费A∨直播| 久久久久亚洲AV成人无码| 在线观看免费人成视频| 污视频网站免费在线观看| 亚洲精品高清国产一线久久| 成年黄网站色大免费全看| 曰批全过程免费视频观看免费软件| 亚洲欧洲∨国产一区二区三区| 久久精品国产免费观看| 在线观看亚洲免费视频| 亚洲精品狼友在线播放| 久久电影网午夜鲁丝片免费| av网站免费线看| 亚洲精品美女久久7777777| 亚洲国产日韩在线视频| 成人无码区免费A片视频WWW| 中文字幕久无码免费久久 |