MySQL提供的系統函數及運算子的清單如下列連結網頁:
http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html昨天已討論過運算子, 今天我們來分享和系統函數有關的討論, 為系統函數相當多, 所以分成上中下三集來分享...(咦! 鐵人賽不到到今天為止? 我還沒把MySQL談完, 欲罷不能, 只好繼續..)
MySQL的函數大列9大類:
1. 流程控制函數
2. 字串函數
3. 數值函數
4. 日期時間函數
5. 全文檢索函數
6. 型別轉換函數
7. XML函數
8. 其他函數
9. 用在Group By場合下的函數
受限於字數, 今天先介紹前兩類....
分享內容(
4人
1. 流程控制函數
2. 字串函數(實在好多, 太特殊的才提供範例了)
其他7類函數及MySQL還沒談完的技術, 我會繼續分享下去...
- CASE: 是用來做多重判斷與選擇
mysql> SELECT CASE 1 WHEN 1 THEN 'one'
-> WHEN 2 THEN 'two' ELSE 'more' END;
-> 'one'
mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
-> 'true'
mysql> SELECT CASE BINARY 'B'
-> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
-> NULL
- IF(): 有三個參數, 第一個參數是比較運算式, 若為真, 回傳第二個參數, 若為假, 回傳第三個參數
mysql> SELECT IF(1>2,2,3);
-> 3
mysql> SELECT IF(1<2,'yes','no');
-> 'yes'
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
-> 'no'
- IFNULL(): 有兩個參數, 若第一個參數值不為NULL, 回傳第一個參數, 否則回傳第二個參數
mysql> SELECT IFNULL(1,0);
-> 1
mysql> SELECT IFNULL(NULL,10);
-> 10
mysql> SELECT IFNULL(1/0,10);
-> 10
mysql> SELECT IFNULL(1/0,'yes');
-> 'yes'
- NULLIF(): 有兩個參數, 若兩個參數值相等, 回傳NULL, 若不等則回傳第一個參數值
mysql> SELECT NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 12. 字串函數(實在好多, 太特殊的才提供範例了)
- ASCII(): 回傳參數字串最左一個字元的ASCII數值
- BIN(): 回傳參數的二進位表示字串
- BIT_LENGTH(): 回傳參數的值佔有多少個Bits, 例如:
mysql> SELECT BIT_LENGTH('text');
-> 32
- CHAR_LENGTH(), CHARACTER_LENGTH(): 回傳參數的字數, 例如CHAR_LENGTH('鐵人賽');回傳3, 雖然是雙位元字, 但CHAR_LENGTH()函數仍然回傳只有三個中文字
- CHAR(): 回傳十進位整數參數值所代表的ASCII字元
- CONCAT_WS(): 第一個參數是分隔字元, 其他參數串連時, 以這個分隔字元來分隔各字串值, 例如:
mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');
-> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');
-> 'First name,Last Name'
- CONCAT(): 合併兩個參數字串
- ELT(): 回傳第一個參數所指的字串, 如下例,
mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo');
-> 'ej'
mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo');
-> 'foo'
mysql> SELECT ELT(0, 'ej', 'Heja', 'hej', 'foo');
-> NULL
mysql> SELECT ELT(6, 'ej', 'Heja', 'hej', 'foo');
-> NULL
如果第一個參數小於1, 或大於總字串數, 則回傳NULL
- EXPORT_SET():
有五個參數, 第一個參數是要轉換為二進位位元的數值, 第二個參數是對應於位元值為1, 第三個參數對應於位元值0, 第四個參數是分隔字元, 預設值為',', 第五個參數是字串長度, 預設值為64
第四、五個參數可以省略而以預設值帶入, 這函數做什麼用途? 我們以例子說明:
mysql> SELECT EXPORT_SET(5,'Y','N',',',4);
-> 'Y,N,Y,N'
第一個參數值為5, 換算成二進位是'101', 由右到左來看, 第一個位元是1, 所以顯示Y, 第二個位元是0, 顯示N, 第三個位元是1, 顯示Y, 第五個參數是4, 需要第4個字元, 帶進N, 所以得到字串'Y,N,Y,N'
mysql> SELECT EXPORT_SET(6,'1','0',',',10);
-> '0,1,1,0,0,0,0,0,0,0'
第一個參數值為6, 換算成二進位為'110', 由右到左來看, 第一個位元是0, 所以顯示0, 第二個位元是1, 顯示1, 第三個位元是1, 顯示1, 第五個參數是10, 需要補其他七個字元, 帶進0, 所以得到字串'0,1,1,0,0,0,0,0,0,0'
- FIELD(): 第一個參數是要查詢的字串一第二個開始的字串是被查詢字串, FIELD()函數傳回第一個參數在其他參數中能找到的第一個位置, 例如:
mysql> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 2 雖然'Hej'包含'ej', 但不被視為相同
mysql> SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');
-> 0 找不到時, 回傳0
- FIND_IN_SET(): 回傳第一個參數在第二個參數中的位置, 例如FIND_IN_SET('b', 'a,b,c')回傳2, FIND_IN_SET('b', 'abcd')回傳0
- FORMAT(): 舉例來說明比較容易瞭解
mysql> SELECT FORMAT(12332.123456, 4);
-> '12,332.1235'
mysql> SELECT FORMAT(12332.1,4);
-> '12,332.1000'
- HEX(): 回傳參數的十六進位表示字串
- INSERT(): 舉例說明,
mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
-> 'QuWhattic' 由第一個參數的第三個字元開始數起的四個元換成'What'
mysql> SELECT INSERT('Quadratic', -1, 4, 'What');
-> 'Quadratic' -1..所以都沒換
mysql> SELECT INSERT('Quadratic', 3, 100, 'What');
-> 'QuWhat' 100超出可換的字數, 所以全部換成'What'
- INSTR(): 回傳第二個參數字串在第一個參數字串中的位置
- LCASE(): 回傳小寫字母字串
- LEFT(): 回傳第一個參數中左邊第一位數起到第二個參數值指定的長度的字串
- LENGTH(): 回傳參數字串長度
- LOAD_FILE(): 看例子
mysql> UPDATE t
SET blob_col=LOAD_FILE('/tmp/picture')
WHERE id=1;
把/tmp/picture檔案內容讀入再寫到資料表t的blob_col欄位中
- LOCATE(): 回傳第一個參數字串在第二個參數字串中的位置, 和INSTR()函數的作用一樣, 但參數位置相反
- LOWER(): 回傳小寫字母字串, 同LCASE()
- LPAD(): 看例子吧
mysql> SELECT LPAD('hi',4,'??');
-> '??hi' 在字串前補足指定字元
- LTRIM(): 移除字串開頭空白
- MAKE_SET(): 不太懂這個函數的用法, 搞懂再來分享
- MID(): 回傳第一個參數字串中, 由第二個參數所指的位置開始第三個參數值長度的字串, 例如: MID('Return a substring.', 3, 4)傳回'turn'
- OCTET_LENGTH(): 相當於LENGTH()函數功能
- ORD(): 傳回字元在ASCII表中的順序值, 例如ORD('2')傳回50, 與ASCII()數作用相同
- POSITION(): 作用同LOCATE()函數
- QUOTE(): 舉例來說明
mysql> SELECT 'Don\'t!';
-> Don't!
mysql> SELECT Quote('Don\'t!');
-> 'Don\'t!' |
- REPEAT(): 將第一個參數的字串重覆第二個字串所指定的次數
- REPLACE(): 將第一個參數中, 第二個參數所指的字串, 以第三個參數來取代
- REVERSE(): 將參數字串反轉顯示, 例如REVERSE('ABC'), 傳回'CBA'
- RIGHT(): 回傳第一個參數字串中由右邊數起的第二個參數所指定的長度的字串
- RPAD(): 舉例來說明
mysql> SELECT RPAD('hi',5,'?');
-> 'hi???' 在右邊補足字元
- RTRIM(): 移除參數字串中右邊的空白字元
- SOUNDEX(): 不太懂這個函數, 搞懂再分享
- SPACE(): 傳回參數所指定的長度的空白字元字串
- STRCMP(): 比較兩個字串, 參見"運算子"的分享中說明
- SUBSTRING_INDEX(): 看例子
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
-> 'www.mysql' 由第一個字元數到第二個句點出現之前, 第一個參數字串是要取值的字串, 第二個參數是要找的字元, 第三個參數是找第幾個
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
-> 'mysql.com' 用了負數, 所以是由右邊開始找
- SUBSTR(), SUBSTRING(): 回傳指定的子字串, 同MID()函數用法
- TRIM(): 刪去字串開始與尾巴的空白字元
- UCASE(): 傳回大寫英文字母字串, 同UPPER()
- UNHEX()(v4.1.2): 將十六進位字串轉換為所代表的文字
- UPPER(): 傳回大寫英文字母字串其他7類函數及MySQL還沒談完的技術, 我會繼續分享下去...
參考資料:http://dev.mysql.com/doc/refman/5.1/en/functions.html
▼ ADVERTISEMENT ▼
廠商來幫忙
邦友收藏動態
- 如何多台電腦共用一個畫面 ? (super288)
- windows XP 下 office 2003 只能給 administrators 群組使用嗎 ? (super288)
- 資安業者緊咬Vodafone :HTC Magic有病毒 (coreyou)
- 超過7成政府機構管制員工使用社交網站 (coreyou)
- 如何讓擁有Power users權限的使用者不能執行關機 (joerich)
- 什麼是Android? (gchingwen)
- 微軟釋出IE9平台預覽 (israel)
- iPad部分配件將延遲出貨 (israel)
- Flurry:上市74天iPhone賣百萬支,Nexus One只有13.5萬 (israel)
- NeuroSky腦波電腦操控技術開始商品化 (israel)
- 常用網路管理工具 Getif (Get Interfaces)教學 (kaiin323)
- 5 本超優免費的自學 Linux 電子書 (scottchen)
- 6款Windows平臺免費備份工具 (tomtom123)
- 關於Cisco、linux、MySQL、Oracle、unix一些命令手冊 (fran633)
- 穩定的感覺會咬人 (heero1219248)
- 化繁為簡的工作拆解手法 (brgodman)
- 系統分析師必須思考的8個問題 (arnolin)
- 用群組原則輕鬆管理使用者電腦 (raytracy)
- 關於CCNA一些自我學習資料大全~! (51pass)
- 10 個不可或缺的 Linux/Unix 指令速查表 (scottchen)
安裝「收藏快捷鍵」,可以讓邦友直接透過Google工具列上的按扭,快速收藏站內、站外的網頁。
相關問答
- 只談MySQL (第二天) ...安裝
- 只談MySQL (第26天) MySQL System Tray Monitor
- 只談MySQL (第一天)
- 只談MySQL (第21天) MySQL的圖形化管理介程式
- Linux下Script完成自動連入mysql並完成指令方式?
- 只談MySQL (第24天) Startup Parameters
- 只談MySQL (第29天) MySQL的運算子
- 只談MySQL - MySQL Migration Toolkit (下)
- 只談MySQL (第25天) MySQL Query Browser
- 只談MySQL (第17天) MySQL Programming Language
- 只談MySQL - MySQL Migration Toolkit (中)
- 只談MySQL - MySQL Migration Toolkit (上)
- 只談MySQL (第23天) Backup & Restore
- 只談MySQL (第28天) 語法結構
- 只談MySQL (第27天) Server Parameters
- 只談MySQL (第三天) 建立資料庫...
- 只談MySQL (第31天) 系統函數(中一)
- 請問一下php mysql 用insert into 資料寫入的問題
- 只談MySQL (第31天) 系統函數(中三)







