<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
    主站蜘蛛池模板: 亚洲色图国产精品| 亚洲人成网www| 亚洲欧美成人一区二区三区| **真实毛片免费观看| 久久久无码精品亚洲日韩按摩 | 亚洲精华国产精华精华液| 久久精品免费全国观看国产| 亚洲另类春色校园小说| 国产成人福利免费视频| 亚洲伊人久久大香线蕉啊| 青青青国产在线观看免费网站| 亚洲欧洲视频在线观看| av无码久久久久不卡免费网站| 亚洲精品视频在线观看免费| h视频在线观看免费完整版| 亚洲第一区视频在线观看| AA免费观看的1000部电影| 亚洲熟女综合色一区二区三区| 午夜免费福利在线| 免费人成再在线观看网站| 亚洲日韩欧洲乱码AV夜夜摸| 久久久久久AV无码免费网站| 亚洲三级在线视频| 国产极品美女高潮抽搐免费网站| 免费国产在线精品一区| 亚洲Av综合色区无码专区桃色| 老汉精品免费AV在线播放| 亚洲高清一区二区三区| 亚洲免费一区二区| 99在线热视频只有精品免费| 亚洲已满18点击进入在线观看| 日本免费人成视频播放| 在线免费播放一级毛片| 亚洲免费福利视频| 亚洲AⅤ永久无码精品AA| 无码日韩精品一区二区三区免费 | 无码日韩精品一区二区免费暖暖| 亚洲国产精品久久丫| 免费v片在线观看| 桃子视频在线观看高清免费视频| 亚洲午夜精品一区二区麻豆|