標籤:style io ar 使用 sp for 資料 on art
1.string contact operator
Sqlserver use + or contact(sqlserver 2012)
In oracle, you can also use contact, but you can not used + to contact string, you should use ||;
2.oracle date time is different with sqlserver date.
Sqlserver date just have date part, not contains time part.
Oracle date format has date and time part.
This is a big difference.
但是如何你使用oracle sql developer, 不修改預設的設定,你查詢
Select sysdate from dual;是看不到時間part的,你可以使用
Select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss‘) from dual;
可以清楚地看到時間與日期部分,當然如果你更改了配置,或者使用的其他資料庫查詢工具,
也許可以看到時間部分,例如我使用的dbever就可以直接看到。
oracle中的timestamp基本等同行sqlserver中的datetime2類型,包含timezone和一定量級的秒值。
oracle中的時間轉換使用to_date(datestring,dateformat);
例如:to_date(‘1990-11-12‘,‘yyyy-mm-dd‘);
3.oracle not support table alias with as.
So you can write the following statement.
Select * from table as alias;
如果你在query中添加派生欄位,oracle 需要加別名。否則會報錯。如下:
select rownum,* from HR.COUNTRIES ;
Report error: ORA:00936, missing expression.
改成如下即可使用:
select rownum,c.* from HR.COUNTRIES c;
4.oracle和sqlserver中的hash函數,
sqlserver中支援checksum(binary_checksum)和hashbytes等函數,詳見MSDN。
oracle中支援ora_hash(10g起)等函數
select OWA_OPT_LOCK.CHECKSUM(rid || rowname),
ora_hash(rid || rowname,1024,1) ,
ora_hash(to_char(rid) || rowname,1024,1),
dbms_utility.get_hash_value(rid || rowname,1,1024)
from test;
僅分享一個使用心得,oracle中,如果你使用hash函數來進行資料比對,建議使用ora_hash,
首先是因為它是系統本身支援,不需要第三方的包,不需要另外賦許可權,當比對的內容過百萬的時候,
它的速度要遠遠優於owa_opt_lock.checksum函數的計算速度。
5.sqlserver 中的top 在oracle中要使用rownum<=n來代替。
oracle中的字元比較預設是區分大小寫,而sqlserver是要看配置的,預設不區分大小寫。
oracle中的對象(列名等)長度不能超過三十。
如果列名中含有空格等,可以使用"",而在sqlserver中使用[];
6.在oracle中字串為空白時表示為null,而在sqlserver中卻不同。
insert into test(rid,rowname) values(3,‘‘);
在sqlserver中查詢使用select * from test where rowname=‘‘ or len(rowname)=0;
在oracle中如此查詢就找不到值,而需要使用如下:
select * from test where rowname is null;
7.其他區別
因為 sqlserver擴充了標準的sql,稱為TSQL,是有許多強大之處的。
例如它的CTE是允許直接進行更新的,所以有時候你寫一個邏輯邏輯的CTE,最後直接更新值。
而在oracle中是不允許這種寫法的。
所以當在oracle中update(delete)一張表的某些記錄時,但要引用到其他多張表時,就比較麻煩,
需要寫成update(delete) … where exists (not exists)這種方式。
如果需要用其他的表值更新,還要寫在set後面用子查詢,非常不爽。
後來merge的出現,在一定程度上緩解了這種不爽,但仍不及sqlserver的好用。
Sql-oracle and sqlserver differences