常見區(qū)別
1. 連接字符串在Oracle中用“||”或者concatt('a','b'),SqlServer中用+,MySQL中用concat('a','b','c')纳鼎。
2. orcale 生成唯一序列是 select sys.guid() from dual 颅悉,mysql是 select uuid() from dual。
3. mysql可以實現(xiàn)自增長主鍵(通過字段的auto_increment屬性)芋齿;Oracle則需要通過序列(Sequence)來實現(xiàn)。
4. mysql可以用雙引號來引用字符串(當然單引號也行);Oracle只能用單引號漠吻。
5. mysql在查詢語句中可以通過limit [offset,] 來直接分頁赵誓;而Oracle需要使用rownum打毛。
6. mysql對于真假的判斷,0為假1為真俩功;Oracle則是用true/false幻枉。
7. mysql的查詢可以 select sysdate(); ;而Oracle需要引用虛表(select sysdate from dual;)诡蜓。
8. mysql對于like的查詢熬甫,CONCAT('%', #{name,jdbcType=VARCHAR},'%') ;Oracle則是用LIKE '%'||#{name,jdbcType=VARCHAR}||'%'
9. mysql的查詢可以 select sysdate(); 蔓罚;而Oracle需要引用虛表(select sysdate from dual;)椿肩。
10. mysql中備份命令:mysqldump,執(zhí)行結(jié)果是一個sql文件脚粟;oracle備份命令:dpdump覆旱,執(zhí)行結(jié)果是一個dmp文件。前者是文本sql命令核无,可以直接導(dǎo)入到其它mysql數(shù)據(jù)庫扣唱,甚至可以稍作修改導(dǎo)入到其它類型的數(shù)據(jù)庫;后者導(dǎo)出文件是二進制的团南,只能Oracle自己用(甚至還有版本限制)噪沙。
11. mysql中的命令默認是直接commit的;Oracle默認不是
12. mysql中日期的轉(zhuǎn)換用dateformat()函數(shù)吐根;Oracle用to_date()與to_char()兩個函數(shù)正歼。
13. mysql在Windows環(huán)境下大小寫是不敏感的;unix/linux環(huán)境下拷橘,對數(shù)據(jù)庫名局义、表名大小寫敏感,列名大小寫不敏感冗疮。Oracle則不論環(huán)境大小寫都不敏感萄唇。
14. mysql支持枚舉類型(enum)、集合類型(set)术幔;Oracle不直接支持另萤,需要使用外鍵等其它手段實現(xiàn)。
常見函數(shù)區(qū)別
1. 功能: 返回不小于 X 的最小整數(shù)
用法:
mysqls: select ceiling(-1.001) value
oracle: select ceil(-1.001) value from dual
2. 功能: 在字符串 str 中所有出現(xiàn)的字符串 from_str 均被 to_str 替換,然后返回這個字符串.
用法:
mysql: SELECT REPLACE('abcdef', 'bcd', 'ijklmn') value
oracle: SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual
3. 函數(shù)名稱不同:
ORACLE: select substr('abcd',2,2) value from dual
MYSQL: select substring('abcd',2,2) value
4. 函數(shù)名稱不同:
instr -> locate(注意:locate的子串和總串的位置要互換)
ORACLE: SELECT instr('abcdefg', 'ab') VALUE FROM DUAL
MYSQL: SELECT locate('ab', 'abcdefg') VALUE
5. 函數(shù)名稱不同:
ORACEL: SELECT length('AAAASDF') VALUE FROM DUAL
MYSQL: SELECT char_length('AAAASDF') VALUE
6. 函數(shù)名稱不同(根據(jù)不同的作用進行選擇):
ORACLE: select u.email_address, nvl(u.email_address, 10) value from sd_usr u (如果u.email_address=NULL,就在DB中用10替換其值)
MYSQL: select u.email_address, IFNULL(u.email_address, 10) value from sd_usr u(如果u.email_address=NULL,顯示結(jié)果中是10四敞,而不是在DB中用10替換其值)
select u.email_address, ISNULL(u.email_address) value from sd_usr u(如果u.email_address是NULL, 就顯示1,否則就顯示0)
7. decode說明:
(1). decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值)
該函數(shù)的含義如下:
IF 條件=值1 THEN
RETURN(翻譯值1)
ELSIF 條件=值2 THEN
RETURN(翻譯值2)
......
ELSIF 條件=值n THEN
RETURN(翻譯值n)
ELSE
RETURN(缺省值)
END IF
(2). mysql If語法說明
功能: 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL)泛源,則 IF()的返回值為expr2;
否則返回值則為 expr3。IF() 的返回值為數(shù)字值或字符串值忿危,具體情況視其所在
語境而定达箍。
用法:
mysql: SELECT IF(1>2,2,3);
8. 函數(shù)名稱不同
ORACLE> select to_char(sysdate,'yyyy-mm-dd') from dual;
ORACLE> select to_char(sysdate,'hh24-mi-ss') from dual;
mysql> select date_format(now(),'%Y-%m-%d');
mysql> select time_format(now(),'%H-%i-%S');
9. 函數(shù)名稱不同:
ORACLE:SELECT to_date('2009-3-6','yyyy-mm-dd') VAULE FROM DUAL
MYSQL: SELECT STR_TO_DATE('2004-03-01', '%Y-%m-%d') VAULE
10. 函數(shù)名稱不同:
TRUNC函數(shù)為指定元素而截去的日期值。
ORACLE: select trunc(-1.002) value from dual
MYSQL:select cast(-1.002 as SIGNED) value
MYSQL:
字符集轉(zhuǎn)換 :?? CONVERT(xxx? USING?? gb2312)
類型轉(zhuǎn)換和SQL Server一樣,就是類型參數(shù)有點點不同? : CAST(xxx? AS?? 類型)? ,?? CONVERT(xxx,類型)癌蚁,類型必須用下列的類型:
可用的類型
二進制,同帶binary前綴的效果 : BINARY
字符型,可帶參數(shù) : CHAR()
日期 : DATE
時間: TIME
日期時間型 : DATETIME
浮點數(shù) : DECIMAL
整數(shù) : SIGNED
無符號整數(shù) : UNSIGNED
11. 函數(shù)名稱不同
ORACLE:SELECT TO_NUMBER('123') AS VALUE FROM DUAL;
MYSQL: SELECT CAST("123" AS SIGNED INTEGER) as value;
SIGNED INTEGER:帶符號的整形
12. 寫法不同:
ORACLE:select SYSDATE value from dual
MYSQL:select now() value / select sysdate() value
13. 函數(shù)名稱不同:
ORACLE: SELECT ADD_MONTHS(sysdate, 2) as value from DUAL;
MYSQL: SELECT DATE_ADD(sysdate(), interval 2 month) as value from DUAL;
14. 功能: 返回兩個日期之間的天數(shù)幻梯。
用法:
mysql: SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate
oracle: 直接用兩個日期相減(比如d1-d2=12.3)
15. Oracle內(nèi)置函數(shù)SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來返回Oracle的錯誤代碼和錯誤消息努释。
MYSQL: 可以從JAVA中得到錯誤代碼碘梢,錯誤狀態(tài)和錯誤消息
16. Oracle內(nèi)置函數(shù)SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來返回Oracle的錯誤代碼和錯誤消息伐蒂。
MYSQL: 可以從JAVA中得到錯誤代碼煞躬,錯誤狀態(tài)和錯誤消息
17. 在MYSQL中是自動增長列. 如下方法獲取最新ID:
START TRANSACTION;
INSERT INTO user(username,password)
VALUES (username,MD5(password));
SELECT LAST_INSERT_ID() INTO id;
COMMIT;
ORACLE中是使用 SEQUENCE;
oracle所有函數(shù)
1. ascii??
返回與指定的字符對應(yīng)的十進制數(shù);
SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;
A???????? A????? ZERO???? SPACE
--------- --------- --------- ---------
65??????? 97??????? 48??????? 32
2.CHR
給出整數(shù),返回對應(yīng)的字符;
SQL> select chr(54740) zhao,chr(65) chr65 from dual;
ZH C
-- -
趙 A
3.INITCAP
返回字符串并將字符串的第一個字母變?yōu)榇髮?
SQL> select initcap('smith') upp from dual;
UPP
-----
Smith
4.LOWER
返回字符串,并將所有的字符小寫
SQL> select lower('AaBbCcDd')AaBbCcDd from dual;
AABBCCDD
--------
aabbccdd
5.UPPER
返回字符串,并將所有的字符大寫
SQL> select upper('AaBbCcDd') upper from dual;
UPPER
--------
AABBCCDD
6.RPAD和LPAD(粘貼字符)
RPAD? 在列的右邊粘貼字符
LPAD? 在列的左邊粘貼字符
SQL> select lpad(rpad('jack',10,'*'),17,'*')from dual;
LPAD(RPAD('JACK',1
-----------------
*******jack******
不夠字符則用*來填滿
7.LTRIM和RTRIM
LTRIM? 刪除左邊出現(xiàn)的字符串
RTRIM? 刪除右邊出現(xiàn)的字符串
SQL> select ltrim(rtrim('? jack? ',' '),' ') from dual;
LTRIM(RTRIM('
-------------
jack
所有函數(shù)鏈接:http://www.shouce.ren/api/oracle/#