熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

怎樣把Oracle查詢轉換為SQLServer

2013-11-13 22:21:09  來源: Oracle 

  在把Oracle查詢轉換為SQL Server的時候要特別當心一些不容易注意到的問題我們知道TSQL是SQL Server的語言引擎而Oracle的語言引擎卻是PLSQL這兩種查詢語言都對

  ANSI SQL標准進行了擴展以提供額外的支持力度你所創建的應用程序幾乎都要用到這些補充特性本文就對最常用的非標准的Oracle擴展進行了說明同時還要介紹下如何

  對這些擴展進行轉化以用在SQL Server環境下

  列的選擇

  用PLSQL執行數據查詢的時候FROM子句是必須的這同SQL Server的要求是一樣的 SELECT語句必須選擇針對的數據表在Oracle數據庫內有一種特殊的表DUALDUAL表由

  Oracle連同數據字典一同創建所有的用戶都可以用名稱DUAL訪問該表這個表裡只有一列DUMMY該列定義為VARCHAR)類型有一行值X

  從DUAL表選擇數據常被用來通過SELECT語句計算常數表達式由於DUAL只有一行數據所以常數只返回一次

  Oracle下的DUAL查詢如下所示

  SELECT  x FROM dual

  而對等的SQL Server查詢則是下面這個樣子

  SELECT x

  連接

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

  Oracle查詢如下所示

  Select Name || Last Name

  From tableName

  對應的SQL Server查詢如下所示

  Select Name + Last Name

  數字取捨

  Oracle數據庫內有一個TRUNC函數該函數返回m位十進制數的n位如果省略m則n就是m的值可以為負表示截去小數點左邊m位數字

  在SQL Server下可以用Round或者Floor

  以下是Oracle查詢

  SELECT  TRUNC(Truncate FROM DUAL

  下面是同類查詢的SQL Server版本

  SELECT ROUND( ) rounded

  ROUND( ) truncated

  SELECT FLOOR(ROUND( ))

  FLOOR(ROUND( ) )

  在把Oracle查詢轉換為SQL Server的時候要特別當心一些不容易注意到的問題我們知道TSQL是SQL Server的語言引擎而Oracle的語言引擎卻是PLSQL這兩種查詢語言都對

  ANSI SQL標准進行了擴展以提供額外的支持力度你所創建的應用程序幾乎都要用到這些補充特性本文就對最常用的非標准的Oracle擴展進行了說明同時還要介紹下如何

  對這些擴展進行轉化以用在SQL Server環境下

  列的選擇

  用PLSQL執行數據查詢的時候FROM子句是必須的這同SQL Server的要求是一樣的 SELECT語句必須選擇針對的數據表在Oracle數據庫內有一種特殊的表DUALDUAL表由

  Oracle連同數據字典一同創建所有的用戶都可以用名稱DUAL訪問該表這個表裡只有一列DUMMY該列定義為VARCHAR)類型有一行值X

  從DUAL表選擇數據常被用來通過SELECT語句計算常數表達式由於DUAL只有一行數據所以常數只返回一次

  Oracle下的DUAL查詢如下所示

  SELECT  x FROM dual

  而對等的SQL Server查詢則是下面這個樣子

  SELECT x

  連接

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

  Oracle查詢如下所示

  Select Name || Last Name

  From tableName

  對應的SQL Server查詢如下所示

  Select Name + Last Name

  數字取捨

  Oracle數據庫內有一個TRUNC函數該函數返回m位十進制數的n位如果省略m則n就是m的值可以為負表示截去小數點左邊m位數字

  在SQL Server下可以用Round或者Floor

  以下是Oracle查詢

  SELECT  TRUNC(Truncate FROM DUAL

  下面是同類查詢的SQL Server版本

  SELECT ROUND( ) rounded

  ROUND( ) truncated

  SELECT FLOOR(ROUND( ))

  FLOOR(ROUND( ) )

  數字轉換

  Oracle的TO_CHAR函數可以把n位NUMBER數據類型轉換為VARCHAR 數據類型同時采用可選的數字格式

  SQL Server則通過STR函數返回數字轉換之後的字符數據不過該函數不具方便的Format參數

  Oracle查詢如下

  SELECT to_char( ) from tab

  SELECT to_char(EXPIRY_DATEDDMONYYYY) from tab

  以下是SQL Server版本的查詢

  SELECT STR(

  SELECT STR(round(

  SELECT CAST(REPLACE((CONVERT(varchar(

  EXPIRYDATE )) ) as varchar())

  LENGTH和LEN

  以下是Oracle的查詢

  SELECT LENGTH(SQLMAG

  Length in characters FROM DUAL

  以上查詢在SQL Server下是這樣寫的

  SELECT LEN(SQLMAGLength in characters

  日期

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

  SYSDATE

  SQL Server則是這樣的

  GETDATE()

  你可以用各種語法操作日期

  以下的代碼對Oracle日期

  值中的月份進行了格式調整(返回日期再加上n月)

  Select   add_months(sysdate) from dual

  SQL Server則是如下完成同等功能的

  Select dateadd(mmgetdate())

  數據的減法也不同以下代碼在Oracle中直接

  對數據進行減法操作

  SELECT sysdate add_months(sysdate) FROM dual

  SQL Server則是這樣做的

  SELECT  datediff(dd GetDate()dateadd(mmgetdate()))

  小結

  幸而我在從Oracle遷移到SQL Server 的過程中並沒有遭遇太棘手的問題當然一開始我就深知系統之間肯定存在顯著的差異我希望本文列出的差別有助於你避免一些常見的問題我在清單A中列出了一個示例大家可以參考一下


From:http://tw.wingwit.com/Article/program/Oracle/201311/18850.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.