首頁  >  文章  >  資料庫  >  MySQL與Oracle 差異比較之三函數

MySQL與Oracle 差異比較之三函數

黄舟
黄舟原創
2017-01-17 11:48:011284瀏覽

 MySQL與Oracle 差異比較之三函數

函數

編號   類別   ORACLE    MYSQL     1.23456,4)    一樣:

ORACLE:select round(1.23456,4) value from dual

MYSQL:select round(1.23456,4) value    

2    abs(-1)    abs(-1)     功能: 將目前資料取絕對值使用1) value

oracle: select abs(-1) value from dual

   

3    ceil(-1.001))    ceiling(-1.001)   不當使用: ling(-1.001 ) value
oracle: select ceil(-1.001) value from dual
   

4    floor(-1.001)    floor(-1.001)  . floor(-1.001) value
oracle: select floor(-1.001) value from dual

   

5    Max(expr)/Min(expr)  r5(expr)/Min(exp)   MIN() 和 MAX() 可以接受一個字串參數;在這

種情況下,它們將返回最小或最大的字串傳下。
用法: 
ROACLE: select max(user_int_key) from sd_usr;
MYSQL: select max(user_int_key) from sd_usr;    

6   str最左邊的那個字符的 ASCII 碼值。如果 str 是一個空字串,

則回傳值為 0。如果 str 是一個 NULL,回傳值也是 NULL.

用法: 
mysql:select ascii('a') value
oracle:select ascii('a') value from dual
 CHAR(N,...)    功能:CHAR() 以整數型別解釋參數,傳回這個整數所代表的 ASCII 碼值所給出的字元
所組成的字串。 NULL 值將被忽略.

用法: 

mysql:select char(97) value
oracle:select chr(97) value from dual

   

8  功能: 在字串 str 中所有出現的字串 from_str 都被 to_str 替換,然後傳回這個字串.

用法: 

mysql: SELECT REPLACE('abcdef', 'bcd', 'ijklmn') value oracle Replace('abcdef', 'bcd', 'ijklmn') value from dual


   

9    INSTR('sdsq','s',2)    INSTR('sqds, s ORACLE: select INSTR('sdsq','s',2) value from dual(要求從位置2開始)
MYSQL: select INSTR('sdsq','s') value(從預設的位置1開始)    

10    SUBSTR('abcd',2,2)    substring('abcd',2,2)    函數名稱不同:
ORACLE: select substr('abcd',2,2) value from dselect subsub ',2,2) value    

11    instr('abcdefg','ab')    locate('ab','abcdefg')    位置要互換)
ORACLE: SELECT instr('abcdefg', 'ab') VALUE FROM DUAL
MYSQL: SELECT locate('ab', 'abcdefg') VALUE    

12   ) lengh (c :

ORACEL: SELECT length('AAAASDF') VALUE FROM DUAL
MYSQL: SELECT char_length('AAAASDF') VALUE    

13   defREFACE('abc/FLSSMSMS_SLS平台Sdef; ', 'ijklmn')    一樣:

ORACLE: SELECT REPLACE('abcdef', 'bcd', 'ijklmn') value from dual
MYSQL: SELECT REPLACE('abcdef', 'bcd', 'ijmn') 14    LPAD('abcd',14, '0')    LPAD('abcd',14, '0')    一樣:
ORACLE: select LPAD('abcd',14, '0') value from dSQLual LPAD('abcd',14, '0') value from dual    

15    UPPER(iv_user_id)    UPPER(iv_user_id)    一樣:
ORACAC: PERselect PERLE_id) usr;

16    LOWER(iv_user_id)    LOWER(iv_user_id)    一樣:
ORACLE: select LOWER(user_id) from sd_usrrMY: select LOWER(user_id) from sd_usr);   nvl(u.email_address, 10)    IFNULL( u.email_address, 10)

ISNULL(u.email_address)    函數名稱不同(根據不同的作用進行選擇):

ORACLE: select u.email_address, nvl(u.email_address, 10) value from sdmail_address, nvl(u.email_address, 10) value from sd .email_address=NULl,就在DB中用10替換其值)
MYSQL: select u.email_address, IFNULL(u.email_address, 10) value from sd_usr u(如果u.email_address=NULl,顯示結果中是10,而顯示結果中是10,而顯示結果不是在DB中用10替換其值)
select u.email_address, ISNULL(u.email_address) value from sd_usr u(如果u.email_address是NULL, 就顯示1,否則就顯示0)    🜠
18    DECODE(iv_sr_status,g_sr_status_com, ld_sys_date, NULL)    無,請以IF或CASE語句取代.
IF語句格式:(expr1,expr2,expr3) 條件說明值值2,翻譯值2,...值n,翻譯值n,缺省值)
此函數的意義如下:

IF 條件=值1 THEN

    RETURN(翻譯值1)
ELSIF 條件=值2 THEN
RETURN(翻譯值2)
    ......
ELSIF 條件=值n THEN
    RETURN(翻譯值n)
ELSE
  大商  㟜值語法:如果 expr1 是TRUE (expr1 0 and expr1 NULL),則IF()的回傳值為expr2;
否則回傳值則為 expr3。 IF() 的回傳值為數字值或字串值,視情況視其所在
語境而定。
用法: 
mysql: SELECT IF(1>2,2,3);
   

19    類型轉換函數   TO_CHAR(SQLCODE)    date_format/ time_format    函數名稱不同
SQL> select to_char(sysdate,'yyyy-mm-dd' ) from dual;
SQL> 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');    

20    to_date(str,format)    STR_TO_DATE(str,format)    to_date(str,format)    STR_TO_DATE(str,format)    函數名稱不同:
ORACLE:S'200date(360 'yyyy-mm-dd') VAULE FROM DUAL

MYSQL: SELECT STR_TO_DATE('2004-03-01', '%Y-%m-%d') VAULE    

SIGNED)    函數名稱不同:
TRUNC函數為指定元素所移除的日期值。
ORACLE: select trunc(-1​​.002) value from dual
MYSQL:select cast(-1.002 as SIGNED) value
MYSQL:

字符集轉換 :   CONVERT(點點不同  : CAST(xxx  AS   類型)  ,   CONVERT(xxx,類型),型別必須使用下列的型別:

 
  可用的類型  RY )    
  日期 : DATE    

  時:TIME    

   日期化 : DATETIME      
  無符號整數 : UNSIGNED      

22    TO_NUMBER(str)    CAST("123" AS SIGNED INTEGER)   ORACLE:SELECT TO_NUMBER('123') AS VALUE FROM DUAL;
MYSQL: SELECT CAST("123" AS SIGNED INTEGER) as value;
SIGNED INTEGER: . ( )    寫法不同:
ORACLE:select SYSDATE value from dual
MYSQL:select now() value
select sysdate() value    

24    Next_day   函數名稱不同:
ORACLE: SELECT Next_day(sysdate,7) value FROM DUAL
MYSQL: SELECT F_COMMON_NEXT_DAY(SYSDATE(), 3) value from DUAL;
(3:指著星期的索引值)傳回的指定的緊接著星期

25    ADD_MONTHS(sysdate, 2)    DATE_ADD(sysdate(), interval 2 month)    函數名稱不同:
ORACLE: SELECT ADD_MONTHS(sysdate, ), interval 2 month) as value from DUAL;    

26    2個日期相減(D1-D2)    DATEDIFF(date1,date2)    功能: 返回兩個日期之間的天數。
用法:
mysql: SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate
oracle: 直接用兩個日期相減(例如d1-d2=12.3)
oracle: 直接用兩個日期相減(如d1-d2=12.3)

 函數   SQLCODE    MYSQL中沒有對應的函數,但JAVA中SQLException。 getErrorCode()函數可以取得錯誤號    Oracle內建函數SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來傳回Oracle的錯誤代碼和錯誤訊息。

MYSQL: 可以從JAVA得到錯誤代碼,錯誤狀態與錯誤訊息    

28    SQLERRM    MYSQL中沒有對應的函數,但JAVA中SQLException。 getMessage()函數可以取得錯誤訊息    Oracle內建函數SQLCODE和SQLERRM是特別用在OTHERS處理器中,分別用來傳回Oracle的錯誤程式碼和錯誤訊息。

MYSQL: 可以從JAVA中得到錯誤代碼,錯誤狀態與錯誤訊息   

29    SEQ_BK_DTL_OPT_INT_KEY.NEXTVAL      INSERT INTO user(username, password)

      VALUES (username,MD5(password));
    SELECT LAST_INSERT_ID() INTO id;
  COMMIT;   :
ORCALE: SELECT SUM(enable_flag) FROM SD_USR;
MYSQL : SELECT SUM(enable_flag) FROM SD_USR;    

31    DBMS_OUTPUT.PUT_LINE(SQLCODE)    在MYSQL中無對應的方法,其功能是在控制台中列印效果,用於測試,對列印無影響。    dbms_output.put_line每行只能顯示255個字符,超過了就會報錯    


 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn