關於Oracle和SQL Server的區別,已經有很多文章從企業和數據庫管理員的角度描述了它們之間的壹般區別。在本文中,我將從應用程序的角度描述SQL erver和oracle平臺之間的差異,並將討論幾種可能的方法來開發不依賴於數據庫環境的應用程序。同時,我不會討論這兩個平臺對於應用程序的明顯差異,例如表分段和索引。
定義通用接口和語言能夠使應用程序獨立於數據庫的通用語言和接口很少,它們可以以同樣的方式應用於關系數據庫:ANSI是由國家標準局(壹個由誌願者成員組成的組織,由私人基金運營)定義的,他們在設備和程序等廣泛的領域制定了國家認可的標準。在數據庫領域,ANSI定義了編寫SQL命令的標準,假設這些命令可以在任何數據庫上運行,而無需更改命令的語法。ODBC是壹種開放式數據庫連接(ODBC)接口,由微軟定義。它允許應用程序訪問數據庫管理系統(DBMS)中的數據,並使用SQL作為訪問數據的標準。ODBC允許最大程度的互連,這意味著壹個應用程序可以訪問不同的數據庫管理系統。然後,應用程序最終用戶可以添加開放式數據庫連接(ODBC)數據庫驅動程序,將應用程序與他們選擇的數據庫管理系統鏈接起來。OLE DB是ODBC的繼承者,它是壹套基於VB、C++和Access允許SQL Server、Oracle、DB2、MySQL等任何後臺連接的軟件組件。在許多情況下,OLE DB組件提供了比原始ODBC更好的性能。JDBC(Java database connection)應用程序接口是Java編程語言與各種數據庫、SQL數據庫和其他表格數據源(如電子表格或普通文本文件)之間獨立於數據庫的連接的行業標準。JDBD API為基於SQL的數據庫訪問提供了壹個調用級API。現實世界中的通用接口遺憾的是,並不是所有的數據庫級命令都是ANSI的,每個數據庫平臺都有自己的擴展功能。對於ANSI或者通用接口,壹般代表幾個功能,所以也可能意味著在性能上失去競爭力。對於小型數據庫和小型應用程序,維護對數據庫的通用訪問是很簡單的,但是當數據庫和/或應用程序變得更大和更復雜時,您必須在代碼中添加函數。
SQL Server與Oracle常用功能的比較
-數學函數
1.絕對值
s:選擇abs(-1)值
o:從dual中選擇abs(-1)值
2.圓形(大)
s:選擇上限(-1.001)值
o:從dual中選擇ceil(-1.001)值
3.圓形(小)
s:選擇下限(-1.001)值
o:從dual中選擇下限(-1.001)值
4.舍入(截斷)
s:選擇cast(-1.002 as int)值
o:從dual中選擇trunc(-1.002)值
四舍五入
s:選擇round(1.23456,4)值1.23460
o:從dual 1.2346中選擇round(1.23456,4)值
6.e是基數的冪
s:選擇Exp(1)值2.7182818284590451
o:從dual 2.71828182中選擇Exp(1)值
7.以e為底的對數
s:選擇log(2.7182818284590451)值1
o:從dual中選擇ln(2.7182818284590451)值;1
8.以10為底對數。
s:選擇log10(10)值1
o:從dual中選擇log(10,10)值;1
9.占領廣場
s:選擇方形(4)值16
o:從dual 16中選擇power(4,2)值
10.求平方根
s:選擇SQRT(4)值2
o:從dual 2中選擇SQRT(4)值
11.求任意數的底數。
s:選擇冪(3,4)值81
o:從dual 81中選擇冪(3,4)值
12.隨機數
s:選擇rand()值
o:從dual中選擇sys.dbms_random.value(0,1)值;
13.拿著這個符號
s:選擇符號(-8)值-1
o:從dual -1中選擇符號(-8)值
-三角函數相關。
14.圓周率
s:選擇PI()值3.1415926535897931
奧:我不知道
15.sin、cos和tan的參數均以弧度為單位。
例如,選擇sin(PI()/2)值得到1(SQLServer)。
16.asin、acos、atan和atan2返回弧度。
17.弧度角度互換(SQLServer,Oracle不知道)
度數:弧度->角度
弧度:角度->弧度
-值之間的比較。
18.求壹個集合的最大值
s:選擇最大值
(選擇1值
聯盟
選擇-2值
聯盟
選擇4個值
聯盟
選擇3個值)a
o:從dual中選擇最大值(1,-2,4,3)
19.求壹個集合的最小值
s:從中選擇最小值
(選擇1值
聯盟
選擇-2值
聯盟
選擇4個值
聯盟
選擇3個值)a
o:從dual中選擇最小(1,-2,4,3)值
20.如何處理空值(F2中的null被10代替)
s:從Tbl中選擇F1,IsNull(F2,10)值
o:從Tbl中選擇F1,nvl(F2,10)值
-字符串函數
21.找到字符編號
s:選擇ascii('a ')值
o:從dual中選擇ascii('a ')值
22.從序列號中查找字符
s:選擇char(97)值
o:從dual中選擇chr(97)值
23.連接
s:選擇' 11'+'22'+'33 '值
O:select CONCAT('11 ',' 22 ')| | 33 dual中的值
23.子串位置-返回3
s:選擇CHARINDEX('s ',' sdsq ',2)值
o:從dual中選擇INSTR('sdsq ',' s ',2)值
23.模糊子串的位置-返回2,如果去掉參數中間的%,則返回7。
//本文轉自C++Builder-/article.asp的研究?i = 996 & ampd=dwn1rn
s:選擇patindex('%d%q% ',' sdsfasdqe ')值
O:oracle沒有找到,但是instr可以通過第四個參數控制出現的次數。
從dual returns 6中選擇instr ('sdsfasdqe ',' SD ',1,2)值。
24.查找子字符串
s:選擇子字符串(' abcd ',2,2)值
o:從dual中選擇substr('abcd ',2,2)值
25.子字符串,而不是返回aijklmnef
s:選擇STUFF('abcdef ',2,3,' ijklmn ')值
o:從dual中選擇Replace('abcdef ',' bcd ',' ijklmn ')值
26.所有子字符串都被替換
學生:更換
o:從dual中選擇translate ('fasdbfasegas ',' fa ',' I ')值。
27.長度
S:len,數據長度
o:長度
28.大寫、小寫轉換
29.將單詞的第壹個字母大寫
史:我沒找到
o:從dual中選擇INITCAP('abcd dsaf df ')值
30.填充左邊的空白(LPAD的第壹個參數為空,與空格功能相同)
s:選擇空格(10)+'abcd '值
o:從dual中選擇LPAD('abcd ',14)值
31.向右填充空格(如果RPAD的第壹個參數是空格,它與space函數相同)。
s:選擇' ABCD '+空格(10)值
o:從dual中選擇RPAD('abcd ',14)值
32.刪除空間
學生:ltrim,rtrim
O:ltrim、rtrim、trim
33.重復字符串
s:選擇復制(' abcd ',2)值
o:我沒找到
34.發音相似度比較(這兩個詞返回值相同,發音相同)
s:選擇SOUNDEX ('Smith '),SOUNDEX ('Smythe ')
o:從dual中選擇SOUNDEX ('Smith '),SOUNDEX ('Smythe ')
在SQLServer中使用select difference ('Smithers ',' Smythers ')來比較soundex的差異。
返回0-4,其中4是同音字,1最高。
-日期功能
35.系統時間
s:選擇getdate()值
o:從dual中選擇系統日期值
36.前後幾天
用整數直接加減。
37.要求約會
s:選擇convert(char(10),getdate(),20)值
o:從dual中選擇trunc(sysdate)值
從dual中選擇to_char(sysdate,' yyyy-mm-dd ')值
38.尋道時間
s:選擇convert(char(8),getdate(),108)值
o:從dual中選擇to_char(sysdate,' hh24:mm:ss ')值
39.取日期和時間的其他部分。
S:DATEPART和DATENAME函數(由第壹個參數決定)
O:to_char函數的第二個參數決定
參數——下表需要補充。
yyyy年
季度qq,q(季度)
月mm,m (m O無效)
Dayofyear dy,y (O代表星期)
日,日(日無效)
周周,周周(周周無效)
工作日dw (O不清楚)
小時hh,HH12,HH24 (HH12,HH24S無效)
分鐘mi,n(n 0有效)
第二個ss,s (s O無效)
毫借調ms (o無效)
-
40.每月的最後壹天
斯:我不知道
o:從dual中選擇最後壹天(系統日期)值
41.本周的某壹天(如周日)
斯:我不知道
o:從DUAL中選擇Next_day(sysdate,7)值;
42.字符串到時間
s:您可以直接切換或選擇cast ('2004-09-08 '作為日期時間)值。
o:從DUAL中選擇To _ date(' 2004-01-05 22:09:38 ',' yyyy-mm-dd hh24-mi-ss ')值;
43.求兩個日期的某壹部分的差值(比如秒)。
s:選擇datediff(ss,getdate(),getdate()+12.3)值
o:直接減去兩個日期(例如d1-d2=12.3)。
SELECT(d 1-D2)* 24 * 60 * 60 value FROM DUAL;
44.根據差異找到新的日期(如分鐘)。
s:選擇dateadd(mi,8,getdate())值
o:從DUAL中選擇sysdate+8/60/24 value;
45.查找不同時區的時間
斯:我不知道
o:從DUAL中選擇New_time(sysdate,' ydt ',' gmt ')值;
-時區參數,東八區的北京應該是YDT -
大西洋標準時間
BST BDT白令海標準時間
中部標準時間
東部標準時間
GMT格林威治標準時間
HST HDT阿拉斯加-夏威夷州標準時間
MST MDT山地標準時間
紐芬蘭標準時間
太平洋標準時間
YST YDT育空標準時間
Oracle支持的字符函數及其Microsoft SQL Server等效函數:
函數Oracle Microsoft SQL Server
將字符轉換為ASCII ASCII ASCII。
字符串串聯(表達式+表達式)
將ASCII轉換為字符CHR CHAR
返回字符串中的起始字符(從左開始)。
將字符轉換成小寫小寫小寫
將字符轉換為大寫大寫。
填寫字符串的左側LPAD N/A。
清除開頭的空白LTRIM LTRIM
清除末端的空白RTRIM RTRIM。
字符串instr patindex中的起始模式。
重復字符串RPAD復制許多次。
字符串的語音表示是SOUNDEX SOUNDEX
具有重復空間的弦RPAD空間
從數字數據轉換為字符數據TO_CHAR字符串
子串子串
替換字符替換材料
將字符串init cap n/a中每個單詞的首字母大寫。
翻譯字符串翻譯不適用
字符串長度長度日期長度或長度
最大不適用,列表中最大的字符串。
列表中最小的字符串不適用。
如果為NULL,則轉換字符串NVL ISNULL。
日期函數
函數Oracle Microsoft SQL Server
日期列+/-值)或
添加_月日期添加
兩個日期之差(日期列+/-值)或
DATEDIFF之間的月數
當前日期和時間SYSDATE GETDATE()
壹個月的最後壹天最後壹天不適用
時區轉換新時間不適用
第二天之後的第壹個星期天不適用
表示日期的字符串TO_CHAR DATENAME。
表示日期的整數TO_NUMBER
(TO_CHAR))日期部分
日期舍入舍入轉換
日期截斷TRUNC轉換
轉換為日期的字符串TO_DATE CONVERT
如果為空,則轉換日期NVL為空。
轉換功能
函數Oracle Microsoft SQL Server
數字被轉換為字符TO_CHAR CONVERT。
將字符轉換為數字TO_NUMBER CONVERT
日期轉換為字符TO_CHAR CONVERT。
字符到日期的轉換
16二進制轉換為二進制HEX_TO_RAW CONVERT
將二進制轉換為16 RAW_TO_HEX CONVERT。
其他行級功能
函數Oracle Microsoft SQL Server
返回第壹個非空表達式解碼聯合。
當前序列值當前值不適用
下壹個序列值NEXTVAL N/A
如果exp1 = exp2,則返回空解碼null。
用戶登錄帳戶ID號UID SUSER_ID
用戶登錄用戶名
用戶數據庫ID號UID USER_ID
用戶數據庫名稱用戶用戶名
當前用戶當前用戶當前用戶
用戶環境(審計跟蹤)USERENV N/A
CONNECT BY子句中的級別N/A
聚合函數
函數Oracle Microsoft SQL Server
平均AVG AVG
計數計數計數計數
最大最大
最小敏敏
標準差STDDEV STDEV或STDEVP
總和總和
方差方差VAR或VARP
Oracle還有壹個有用的函數EXTRACT,它可以在日期-時間或時間間隔表達式中提取並返回特定的時間域:
摘錄(從日期開始的年份)