以下的文章主要是介紹Oracle數據庫與Access、SQL Server、常見應用的比較,我在某公司做一個產品中,需要用到的有Access、SQL Server、Oracle數據庫這三個版本;編寫SQL語句的過程中,盡量使用一些通用的語句,但還是有些方面有些區別避免不了,現簡單總結一下。
以下A代表Access,S代表SQL Server,O代表Oracle
1、取當前系統時間
A:Select Now()
S:Select Getdate()
O:Select Sysdate From Dual
2、連接字符串
A:&
S:+
O:||
3、字符串函數(截取字符串、大寫、小寫、查找字符串位置)
A:Mid、UCase、LCase、InStr
S:SubString、Upper、Lower、CharIndex
O:SubStr、Upper、Lower、InStr
4、判斷取值語句
A:IIF
S:Case When Then
O:Decode
5、時間字段
A:要用#號分隔,或者轉換為日期
SELECT * FROM Books WHERE RegDate = #2007-5-1# 或
SELECT * FROM Books WHERE RegDate = CDate(’2007-5-1′)
S:可以直接用''
- SELECT * FROM Books WHERE RegDate = ‘2007-5-1′
- O:To_Date
- SELECT * FROM Books WHERE RegDate=To_Date('2007-05-01','yyyy-mm-dd')
6、數據類型轉換
A:CStr,CInt,CDate
S:Convert
O:To_Char,To_Number,To_Date
7、Inser Into …..Select …From 語句
- Insert Into a(ii,jj,kk) (Select ii,jj,kk From b)
這樣的語句,在SQL Server以及Oracle數據庫中都不會有錯,但在Access中會報:INSERT INTO 語句的語法錯誤。Access應該把後面Select語句的括號去掉,如下:
- Insert Into a(ii,jj,kk) Select ii,jj,kk From b
同時這樣寫在SQL Server和Oracle中都不會有錯
8、關鍵字
有些字母在Access,SQL Server中是關鍵字,需要用[ ]界定可解決問題,例如:at,name
9、別名
SQL Server和Oracle中字段起別名時as可以省略,Access不能
10、表名前綴
- Select *,1 From A
這樣的語句在Access,SQL Server中不會有錯,但在Oracle數據庫中是不行的,必須要寫成這樣:
- Select A.*,1 From A
11、如果語句中有:(冒號),例如有時間字段的查詢:CalcDate=#2008-05-01 11:00:00#,在Access中一般會出現如下錯誤:不正常地定義參數對象。提供了不一致或不完整的信息。將相應Query的ParamCheck設為False即可。
12、Access中的邏輯值在庫中為-1和0,而SQL Server中為1和0,所以寫BoolField = 1這樣的語句有兼容性問題,應該改為BoolFIEld <> 0
13、Access的varchar(文本)型最大只有255,所以如果一個文本型字段大於255時,最好定義成備注型(Access中)或text型(SQL Server中);