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

Oracle遷移SQLServer的陷阱

2022-06-13   來源: 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的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(SQLMAGLength 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()))
From:http://tw.wingwit.com/Article/program/Oracle/201311/17340.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.