Mysql學習筆記整理手冊



繼上一篇博客 《Oracle學習筆記整理手冊》之后,我再寫一篇Mysql版本的

PS:本博客收錄自己工作中遇到學到的一些mysql技能,有時間就更新整理一下

(1) str_to_date

oracle有to_date函數,Mysql的格式是str_to_date(‘2019-02-12 11:34:32’, ‘%Y-%m-%d %H:%i:%s’)

(2) 遞歸查詢

oracle實現遞歸查詢的話,就可以使用start with … connect by,mysql並沒有通過類似函數,解決方法是通過自定義函數的方法,具體可以參考我這篇博客
https://blog.csdn.net/u014427391/article/details/87297884

(3) 排序問題

oracle做數據排序的時候,有時候可以用nulls first或者nulls last將null值排在最前或者最后。
不過遷到Mysql的話,mysql並沒有提供類似函數,所以要怎么實現?下面給出解決方法:
null值排在最后,用Mysql的IF和ISNULL函數。如果為空返回1,否返回0

select * from A order by IF(ISNULL(a),1,0),a desc
1
null值排在最前,用Mysql的IF和ISNULL函數。如果為空返回0,否返回1

select * from A order by IF(ISNULL(a),0,1),a desc
1
具體可以參考我寫的這篇博客:https://blog.csdn.net/u014427391/article/details/87297068

(4) 條件函數

條件函數比如case..when在mysql、Oracle都是有的,除了case...when這最基本之外,Oracle有nvl、nvl2和decode函數,Mysql沒有提供類似decode的函數,不過有類似Oracle的nvl和nvl2函數。

Oracle
介紹一下oracle的nvl函數和nvl2函數。

nvl函數
nvl函數基本語法為nvl(E1,E2),意思是E1為null就返回E2,不為null就返回E1。

nvl2函數
nvl2函數的是nvl函數的拓展,基本語法為nvl2(E1,E2,E3),意思是E1為null,就返回E3,不為null就返回E2。
nvl函數具體可以參考我這篇博客:https://blog.csdn.net/u014427391/article/details/84996009

Mysql

上面是Oracle的做法,mysql的做法可以用IFNULL(E1,E2)函數,其功能類似與Oracle的nvl函數。意思是E1為null就返回E2,不為null就返回E1。

Mysql IF函數,這里可以和Oracle的nvl2函數做對比,不過差別比較大了,nvl2函數是針對數值為空的情況,IF函數是針對自定義條件的

格式:IF(Condition,A,B)
意義:當Condition為TRUE時,返回A;當Condition為FALSE時,返回B。

(5) 列轉行函數

Oracle列轉行函數可以用vm_comcat函數,mysql的用concat_ws函數
使用方法:
CONCAT_WS(separator,str1,str2,...)
eg:

select concat_ws(',','11','22','33');

Oracle列轉行函數的可以參考我以前博客:https://blog.csdn.net/u014427391/article/details/84981114

列轉行函數不兼容問題:https://blog.csdn.net/u014427391/article/details/84867390

(6) find_int_set

Mysql有提供一個find_int_set函數,其語法為FIND_IN_SET(str,strlist)

  • str: 要查詢的字符串
  • strlist: 序列,用逗號分隔,比如(1,2,3)

這個函數只要用於查詢的時候,查詢字符串是否在strlist序列里,like查詢只是廣泛的模糊匹配

(7) 類型轉換函數

mysql的類型轉換函數為cast(字段 as 類型),
mysql支持的類型有

  • CHAR[(N)] 字符型
  • DATE 日期型
  • DATETIME 日期和時間型
  • DECIMAL float型
  • SIGNED int
  • TIME 時間型

(8) 合並更新

Oracle實現merge into實現,意思是數據表已經有數據就更新,沒數據就新增
mysql的函數是replace into,語法


    replace into 表格(字段,...) values(數據,...)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM