国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

Oracle遷移SQL Server的陷阱

2024-08-31 00:52:02
字體:
來源:轉載
供稿:網友

  在把Oracle查詢轉換為SQL Server的時候要非凡當心一些不輕易注重到的問題。我們知道,T-SQL是SQL Server的語言引擎,而Oracle的語言引擎卻是PLSQL。這兩種查詢語言都對ANSI SQL-92標準進行了擴展以提供額外的支持力度。 你所創建的應用程序幾乎都要用到這些補充特性。本文就對最常用的、非標準的Oracle擴展進行了說明,同時還要介紹下如何對這些擴展進行轉化以用在SQL Server環境下。 
  列的選擇

  用PLSQL執行數據查詢的時候,FROM子句是必須的,這同SQL Server的要求是一樣的。 SELECT語句必須選擇針對的數據表。在Oracle數據庫內有一種非凡的表DUAL。DUAL表由Oracle連同數據字典一同創建,所有的用戶都可以用名稱DUAL訪問該表。這個表里只有一列DUMMY,該列定義為VARCHAR2(1)類型,有一行值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就是0位。m的值可以為負,表示截去小數點左邊m位數字。

  在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) )

  數字轉換

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

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

  Oracle查詢如下:

  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"

  日期

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

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

  SYSDATE

  SQL Server則是這樣的:

  GETDATE()

  你可以用各種語法操作日期。以下的代碼對Oracle日期值中的月份進行了格式調整(返回日期再加上n月):

  Select add_months(sysdate,12) from dual

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

  Select dateadd(mm,12,getdate())

  數據的減法也不同。
以下代碼在Oracle中直接對數據進行減法操作:

  SELECT sysdate -add_months(sysdate,12) FROM dual

  SQL Server則是這樣做的:

  SELECT datediff(dd, GetDate(),dateadd(mm,12,getdate()))

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扶沟县| 榆林市| 蒙山县| 林芝县| 台山市| 颍上县| 长乐市| 繁昌县| 资源县| 潞西市| 石楼县| 宁安市| 富民县| 晋宁县| 武夷山市| 宁夏| 濮阳市| 县级市| 碌曲县| 乌鲁木齐市| 灌南县| 临夏市| 鱼台县| 常宁市| 蒙阴县| 富平县| 沙河市| 安吉县| 房产| 大石桥市| 太白县| 瓮安县| 从化市| 内乡县| 托克逊县| 丹寨县| 镇安县| 远安县| 株洲市| 息烽县| 新乡县|