Oracle與Mysql數據庫SQL語法差異化整理

0着绷、數據類型
1.Oracle中有NUMBER拆撼;MySQL中有INT/INTEGER/DECIMAL销部。
  其等換寫法INT=NUMBER(10)硫椰,DECIMAL=NUMBER(10,2)
2.Oracle中有VARCHAR2;MySQL有VARCHAR
3.Oracle中有DATE骆莹,包含年月日時分秒颗搂;MySQL中有DATE/TIME/DATETIME可任選;
1幕垦、字符串截取丢氢,substr(“目標字符串”傅联,開始坐標,截取長度)
oracle:
substr( string , 0, 10)疚察,可以從0開始也可以從1開始蒸走,效果一樣;   

mysql:
substr( string , 1, 10)必須從1 開始貌嫡;substring比驻、mid與substr效果一樣;
mysql中l(wèi)eft(“目標字符串”岛抄,從左側第一個開始的截取長度)别惦;
mysql中right(“目標字符串”,從右側最后一個開始的截取長度);
2夫椭、日期-字符串轉換
            oracle用法     -->       mysql用法
to_char(sysdate,'yyyy-mm-dd') --> date_format(now(),'%Y-%m-%d');    
to_date('2023-08-01','yyyy-mm-dd') --> str_to_date('2023-08-01','%Y-%m-%d');
3掸掸、取時間
oracle:
sysdate關鍵字,獲取系統(tǒng)本地時間益楼。
  如:select sysdate from dual;

mysql:
now()函數或者current_date關鍵字猾漫,獲取系統(tǒng)本地時間点晴。
   如:select now() from dual;
      select current_date from dual;

擴展:SYSDATE()函數實際上返回執(zhí)行時的時間感凤,NOW()函數返回一個常量時間,該語句開始執(zhí)行粒督。
mysql> SELECT NOW(), SLEEP(5), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(5) | NOW()               |
+---------------------+----------+---------------------+
| 2023-08-01 11:36:22 |        0 | 2023-08-01 11:36:22 |
+---------------------+----------+---------------------+
由上執(zhí)行后可以看出:即便睡眠了5秒陪竿,兩次now()的值還是一樣的;

mysql>  SELECT SYSDATE(), SLEEP(5), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(5) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2023-08-01 11:40:05 |        0 | 2023-08-01 11:40:10 |
+---------------------+----------+---------------------+
由上執(zhí)行后可以看出:睡眠了5秒后屠橄,SYSDATE()的值比前面大了5秒族跛;
4、日期直接加減的含義不同了
oracle:
SELECT sysdate() AS current_time, sysdate()-1 AS yesterday_time;
結果將如下所示:
---------------------  ------------------------
current_time           yesterday_time
---------------------  ------------------------
2023-08-02 10:00:00    2023-08-01 10:00:00
---------------------  ------------------------
由上執(zhí)行后可以看出:返回當前時間前一天對應的時間(減1天)

mysql:
方式1:select sysdate() - 1 from dual;--返回當前時間前一天對應的時間(減1天)
[推薦]方式2:select date_sub(now(), interval 1 DAY) from dual;--返回當前時間前一天對應的時間(減1天)
5锐墙、字符串連接(拼接)
oracle:
方式1:CONCAT(char1, char2) 函數礁哄; --當其中一個參數為NULL的時候,返回另一個不為NULL的參數溪北,如果所有都為NULL則返回NULL桐绒;
方式2:"char1 || char2"
mysql:
方式1:CONCAT(char1, char2)可以拼接多個字符串,但只要有一個為NULL之拨,則返回NULL值;
如:
  SELECT CONCAT('1,',NULL,'2');
  結果為 NULL
  SELECT CONCAT('1,','','2');
  結果為 1茉继,2
6、分頁
oracle分頁關鍵字rownum蚀乔,需要作為where條件烁竭;
如:select * from table as t where t.name='XX' and rownum > 10 and rownum <= 15; --取值11,12,13,14,15

mysql分頁limit關鍵字; 
如:select * from table as t where t.name='XX' limit 10, 5;--取值11,12,13,14,15
7、nvl()函數-判斷空
oracle:
nvl(expr1,expr2)吉挣,如果expr1為空那么返回expr2派撕,如果expr1值不為空婉弹,則返回expr1。
擴展:nvl2函數的是nvl函數的拓展终吼,基本語法為nvl2(E1,E2,E3)马胧,意思是E1為null,就返回E3衔峰,不為null就返回E2佩脊。

mysql:沒有nvl()方法;
需要替換為 ifnull(expr1,expr2);如果expr1為空那么返回expr2垫卤,如果expr1值不為空威彰,則返回expr1。
擴展:IF(expr1,expr2,expr3):如果expr1不為null穴肘,則返回expr2歇盼,否則返回expr3。
8评抚、decode()函數
oracle:
decode(條件,值1,返回值1,值2,返回值2,…值n,返回值n,默認值)豹缀;
   當條件的值等于值1的時候,返回值1慨代,當條件的值等于值2的時候邢笙,返回值2,如果條件與值1-值n都不想等侍匙,則返回默認值氮惯。相當于java中的if-else。

mysql:沒有decode函數想暗;
需要替換為 ifnull(elt(filed(條件妇汗,值1,值2….值n)说莫,返回值1杨箭,返回值2…..返回值n),默認值)
擴展:case when then else end储狭,判斷when互婿,返回then,都匹配不上時晶密,返回else擒悬;
9、結果集拼接
oracle:
wm_concat(字段2)稻艰,wm_concat是分組函數懂牧,前面查詢的字段需要在后面group by一下,如果不group by一個字段的話將會把所有行的字段2都用逗號拼接起來;

mysql:
group_concat(字段2)僧凤,group_concat也是分組函數畜侦,前面查詢的字段同樣需要在后面group by一下;group_concat函數是不會留null值的躯保;
10旋膳、uuid獲取
oracle:sys_guid()
mysql:uuid()
11、字符串轉數字途事,數字轉字符串
oracle: 
字符串轉數字:to_number(字段)
數字轉字符串:to_char(123)

mysql:
字符串轉數字:Convert(字段,SIGNED)  或者 CAST(字段 as SIGNED) 
數字轉字符串:CAST(123 as CHAR(3))
以上方法為通用方法验懊,可選類型如下:
    字符型,可帶參數 : CHAR()     
    日期 : DATE     
    時間: TIME     
    日期時間型 : DATETIME     
    浮點數 : DECIMAL      
    整數 : SIGNED     
    無符號整數 : UNSIGNED 
12尸变、左連接义图、右連接
oracle:可以使用(+)或者right join、left join召烂;
如:右連接select * from a,b where a.id(+)=b.id;
左連接select * from a,b where a.id=b.id(+);

mysql:只有right join碱工、left join可以實現
13、全連接
oracle:full join 關鍵字
mysql:union 關鍵字
14奏夫、臨時表
oracle:可以用with構建一張臨時表怕篷;
如:with table_temp as (select * from a where ...); 
        select * from table_temp;

mysql:不支持構建臨時表; 使用(select ...)的子查詢語句酗昼,就會自動創(chuàng)建臨時表廊谓;
15、自動增長
oracle:沒有自動增長的數據類型仔雷,需要創(chuàng)建自增的序列號蹂析;
mysql:AUTO_INCREMENT設置字段自動增長舔示;
16碟婆、判斷空
oracle:空值只有null,通過is null判空惕稻;
mysql:空值有null 和 ''竖共,通過is null 和 ='' 同時判空;
17俺祠、字符串長度
oracle:length(str)
mysql:char_length(str)
18公给、數值截取
oracle:trunc()函數
    1、截取掉(去掉)小數點后指定位數的數值蜘渣,如果該位數為負數淌铐,則將小數點前的數值對應的位數變成0,如果位數超出數值的整數部分則結果為0蔫缸;如下例:
        -- 首先看對數值進行截取操作
        SELECT TRUNC(122.123, 4) from dual;     # 122.123
        SELECT TRUNC(122.123, 3) from dual;     # 122.123
        SELECT TRUNC(122.123, 2) from dual;     # 122.12
        SELECT TRUNC(122.123, 1) from dual;     # 122.1
        SELECT TRUNC(122.123, 0) from dual;     # 122
        SELECT TRUNC(122.123, -1) from dual;     # 120
        SELECT TRUNC(122.123, -2) from dual;     # 100
        SELECT TRUNC(122.123, -3) from dual;     # 0
        SELECT TRUNC(122.123, -4) from dual;     # 0
    2腿准、針對日期的截取,如下例:
        -- 首先看對數值進行截取操作(今天的日期是2022年2月24日)
        SELECT TRUNC(sysdate, 'YY') from dual;  # 01-1月 -22
        SELECT TRUNC(sysdate, 'yy') from dual;  # 01-1月 -22
        SELECT TRUNC(sysdate, 'MM') from dual;  # 01-2月 -22
        SELECT TRUNC(sysdate, 'mm') from dual;  # 01-2月 -22
        SELECT TRUNC(sysdate, 'DD') from dual;  # 24-2月 -22
        SELECT TRUNC(sysdate, 'dd') from dual;  # 24-2月 -22

mysql:truncate()函數
    1、截取掉(去掉)小數點后指定位數的數值吐葱,如果該位數為負數街望,則將小數點前的數值對應的位數變成0,如果位數超出數值的整數部分則結果為0弟跑;如下例:
        -- 等同于Oracle的trunc函數灾前。作用是對日期或數值進行截取操作
        -- 首先看對數值進行截取操作
        SELECT TRUNCATE(122.123, 4) from dual;  # 122.123
        SELECT TRUNCATE(122.123, 3) from dual;  # 122.123
        SELECT TRUNCATE(122.123, 2) from dual;  # 122.12
        SELECT TRUNCATE(122.123, 1) from dual;  # 122.1
        SELECT TRUNCATE(122.123, 0) from dual;  # 122
        SELECT TRUNCATE(122.123, -1) from dual; # 120
        SELECT TRUNCATE(122.123, -2) from dual; # 100
        SELECT TRUNCATE(122.123, -3) from dual; # 0
        SELECT TRUNCATE(122.123, -4) from dual; # 0
    2、不支持對日期的截让霞(可以使用date_format函數)哎甲;
        DATE_FORMAT(NOW(),'%m-%d-%Y')    #02-24-2022
        參考:[MySQL DATE_FORMAT() 函數](https://www.w3school.com.cn/sql/func_date_format.asp)

19、引號
oracle:sql中只識別英文單引號饲嗽;
mysql:sql中可識別英文的雙引號和英文單引號烧给;
20、merge into
oracle:
支持merge into喝噪,判斷B表和A表是否滿足ON中條件础嫡,如果滿足則用B表去更新A表,如果不滿足酝惧,則將B表數據插入A表榴鼎;

mysql:
不支持merge into,提供的replace into 和on duplicate key update可實現相似的功能晚唇;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末巫财,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子哩陕,更是在濱河造成了極大的恐慌平项,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悍及,死亡現場離奇詭異闽瓢,居然都是意外死亡,警方通過查閱死者的電腦和手機心赶,發(fā)現死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門扣讼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缨叫,你說我怎么就攤上這事椭符。” “怎么了耻姥?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵销钝,是天一觀的道長。 經常有香客問我琐簇,道長蒸健,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮纵装,結果婚禮上征讲,老公的妹妹穿的比我還像新娘。我一直安慰自己橡娄,他們只是感情好诗箍,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挽唉,像睡著了一般滤祖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓶籽,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天匠童,我揣著相機與錄音,去河邊找鬼塑顺。 笑死汤求,一個胖子當著我的面吹牛,可吹牛的內容都是我干的严拒。 我是一名探鬼主播扬绪,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼裤唠!你這毒婦竟也來了挤牛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤种蘸,失蹤者是張志新(化名)和其女友劉穎墓赴,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體航瞭,經...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡诫硕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了沧奴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痘括。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖滔吠,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情挠日,我是刑警寧澤疮绷,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站嚣潜,受9級特大地震影響冬骚,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一只冻、第九天 我趴在偏房一處隱蔽的房頂上張望庇麦。 院中可真熱鬧,春花似錦喜德、人聲如沸山橄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽航棱。三九已至,卻和暖如春萌衬,著一層夾襖步出監(jiān)牢的瞬間饮醇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工秕豫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朴艰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓混移,卻偏偏與公主長得像呵晚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沫屡,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內容

  • Oracle數據庫的安裝 基礎概念 數據庫:能夠長期保存饵隙,支持多用戶共享,通過數據模型盡可能的減少冗余的數據集合沮脖。...
    AAnna珠閱讀 1,413評論 0 0
  • 一金矛、前言 假設有一張用戶表system_user,里面包含主鍵id勺届、姓名name驶俊、年齡age的列屬性,用戶足跡表s...
    潛心之力閱讀 328評論 0 1
  • 1.字符串拼接用 || 來進行字符串拼接免姿,把MU和1313拼接為MU1313select 'MU'||'1313...
    測試進行中閱讀 741評論 0 0
  • 主流關系型數據庫 關系型數據庫存儲數據的特點 結構化查詢語言: 數據類型: select * from emp; ...
    陳先森mansplain閱讀 684評論 0 0
  • 1.簡介 數據存儲有哪些方式饼酿?電子表格,紙質文件胚膊,數據庫故俐。 那么究竟什么是關系型數據庫? 目前對數據庫的分類主要是...
    喬震閱讀 1,715評論 0 2