天天看點

Oracle 和SQL Server 中的SQL語句使用差別

最近開始接觸Oracle,想要了解下同SQL Server使用時的差別。搜尋網上資訊找到具體差別分類如下:

一、資料類型比較

 類型名稱 Oracle  SQLServer  比較
 字元資料類型  CHAR  都是固定長度字元資料但oracle裡面最大度為2kb,SQLServer裡面最大長度為8kb
 變長字元資料類型  VARCHAR2  VARCHAR  Oracle裡面最大長度為4kb,SQLServer裡面最大長度為8kb
 根據字元集而定的固定長度字元串  NCHAR  前者最大長度2kb後者最大長度4kb
 根據字元集而定的可變長度字元串  NVARCHAR2  NVARCHAR  二者最大長度都為4kb
 日期和時間資料類型  DATE  有Datetime和Smalldatetime兩種  在oracle裡面格式為DMY在SQLSerser裡面可以調節,預設的為MDY
 數字類型  NUMBER(P,S)  NUMERIC[P(,S)]  Oracle裡面p代表小數點左面的位數,s代表小數點右面的位數。而SQLServer裡面p代表小數點左右兩面的位數之和,s代表小數點右面的位數。
 DECIMAL(P,S)  DECIMAL[P(,S)]  Oracle裡面p代表小數點左面的位數,s代表小數點右面的位數。而SQLServer裡面p代表小數點左右兩面的位數之和,s代表小數點右面的位數。 
 整數類型  INTEGER  INT  同為整數類型,存儲大小都為4個位元組
 浮點數類型  FLOAT
 實數類型  REAL

二、普通函數比較

函數 ORACLE SQLServer 比較
數學函數 ABS 兩者都是取絕對值函數格式都為abs(numeric_expression)
ASIN,ACOS,ATAN ASIN,ACOS,ATIN 用于計算反正弦,反餘弦,反正切的值。參數為float類型的表達式,取值-1~1.
SIN,COS,TAN 用于計算正弦,餘弦,正切的值。參數為float類型的表達式.
CEIL CELING 用于計算大于或等于指定值的最小整數,格式:~(numeric_expression)
DEGREES 用于弧度對角度的轉變,而RADIANS用于角度到弧度的轉變,這兩個函數都是SQLServer特有的。
EXP 給定資料的指數值
FLOOR 用于計算小于或等于、給定值的最大整數。
LOG 用語求指定函數的自然對數,在SQLServer裡面還有LOG10這個函數,用于求以10為底的對數值
POWER 用于求指定表達式的給定次方,POWER(M,N)表示M的N次方。
ROUND 用于把表達式圓整到指定長度,在oracle裡面還分資料型和日期型。兩種
SIGN
SQRT 用于求給定式子的平方根
字元串函數 || + 用于把兩個或多個字元資料或列連接配接起來。Oracle裡用||,SQLServer裡用+。
ASCII 用于求最左端字元的ASCII值。
TO_CHAR CHAR 都是資料類型轉換辨別,前者主要是将日期、時間或數轉換為文本。後者主要是将整形的ASCII數,轉換成相對應的字元
CHARINDEX 傳回指定樣式的起始位置
DIFFERENCE
LOWER 轉換成小寫字母。
LTRIM 删除資料前面的空格,也就是左删除,還有與之對應的RTRIM,為右删除
SOUNDEX 傳回由4個字元組成的代碼,以平估兩個字元的相似性。
SUBSTR/SUBSTRB SUBSTRING 格式為~(string,a,b),傳回以a位置開始的有b個字元長的string的一部分,oracle裡面還有substrb函數,功能相同但是他裡面的a,b是以位元組為機關而不是以字元為機關。
UPPER 以大寫形式傳回string。
日期時間函數 SYSDATE GETDATE 傳回目前的時間日期。
NEXT_DAY DATEADD 前者格式為NEXT_DAY(d,stirng)表示傳回在日期d之後滿足string給出條件的第一天。DATEADD格式為DATEADD(d,num,date)表示傳回在日期d天之後加上num天後的日期,date表示傳回的類型。
系統函數 COL_NAME 傳回列名
VSIZE COL_LENGTH 傳回列的長度
DATELENGTH 傳回任意資料類型表達式的實際長度,二者功能相近。

三、特殊規則比較

SQL SERVER
CURRVAL, NEXTVAL Use the identity column type, and @@identity global variable, IDENT_SEED() and IDENT_INCR() functions.
GETDATE()
ROWID Use the identity column type
USER
LIKE模糊查詢%,_ , ^

四、操作符比較

Operator Microsoft SQL Server
Equal to (=) Same
Greater than (>)
Less than (<)
Greater than or equal to (>=)
Less than or equal to (<=)
Not equal to (!=, <>,^=)
Not greater than, not less than N/A !> , !<
In any member in set IN
Not in any member in set NOT IN
Any value in set ANY, SOME
Referring to all values in set. != ALL, <> ALL, < ALL, > ALL, <= ALL, >= ALL
Like pattern LIKE
Not like pattern NOT LIKE
Value between x and y BETWEEN x AND y
Value not between NOT BETWEEN
Value exists EXISTS
Value does not exist NOT EXISTS
Value {is | is not} NULL IS NULL, IS NOT NULL Same. Also supports = NULL, != NULL for backward compatibility (not recommended).

五、ORACLE 與SQL SERVER間的轉換。

   如需在Oracle 資料庫與Sql Server 資料庫之間進行轉換需要做好以下工作:

  1)保證所有的 SELECT, INSERT, UPDATE, and DELETE 語句的文法是正确的,如果有什麼不同需要做一定的更改。

  2)改變所有ORACLE中的 outer joins 為SQL SERVER支援的 SQL-92 standard outer join 标準。

  3)将Oracle functions 與SQL Server functions 進行轉換。

  4)檢查所有的操作符.。

  5)将ORACLE的“||” 字串連接配接操作符轉換為SQL SERVER的 “+”字串連接配接操作符。

  6)将ORACLE的 PL/SQL 程式轉換為SQL SERVER的TransactSQL 程式。

  7)修改所有的ORACLE的 PL/SQL 遊标為沒有遊标的SELECT 語句或者是SQL SERVER的 TransactSQL 遊标。

  8)将ORACLE的PL/SQL procedures, functions, and packages 與SQL SERVER的TransactSQL procedures進行轉換。

  9)将ORACLE的 PL/SQL triggers與SQL SERVER的TransactSQL triggers進行轉換。

  10)用 SET SHOWPLAN 語句來調整你的查詢的性能。

墨匠