Sql-oracle and sqlserver differences

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.