mysql函數二
四、條件判斷函數
1、if(expr,v1,v2)函數:成立返回結果v1,否則結果v2
例:select id,if(grade>=60,'pass','fail') from t;
2、IFNULL(V1,V2)函數:如果空顯示v2,否則顯示v1
例:mysql> select a,ifnull(a,'no') from pet76;
+------+----------------+
| a | ifnull(a,'no') |
+------+----------------+
| 100 | 100 |
| NULL | no |
| 12 | 12 |
+------+----------------+
3 rows in set (0.01 sec)
3、CASE函數
格式:case when expr1 then v1 [when expr2 then v2...] [else vn] end
格式:case expr when e1 then v1 [when e2 then v2...] [else vn] end
例1:select grade,case when grade>60 then 'good' when grade=60 then 'pass' else 'fail' end level from t;//level是字段別名
例2:select grade,case grade when 90 then 'good' when 60 then 'pass' else 'no grade' end level from t;//level是字段別名
五、系統信息函數
version()返回數據庫的版本號
connection_id()返回服務器的連接數
database(),schema()返回當前數據庫名
user(),system_user(),session_user()返回當前用戶
current_user(),current_user返回當前用戶
charset(str)返回字符串str的字符集
collation(str)返回字符串str的字符排列方式
last_insert_id()返回最近生成的auto_increment值,如果一條insert語句插入多條記錄,則查出來是第一個值插入時的取值。
六、加密函數
1、password(str)可以對字符串str進行加密,該加密是不可逆的,主要給用戶的密碼加密。
2、MD5(srtr)可以對字符串str進行加密,主要對普通數據進行加密
3、encode(str,pswd_str)可以用字符串pswd_str加密字符串str。加密結果是個二進制數,必須用blob類型的字段來保存它
4、decode(crypt_str,pswd_str)可以用字符串pswd_str來為crypt_str解密。crypt_str是通過encode(str,pswd_str)加密後的二進制數據。
七、其他函數
1、format(x,n)可以將數字x進行格式化,將x保留到小數點後n位。
例:mysql> select format(2.3456,3);
+------------------+
| format(2.3456,3) |
+------------------+
| 2.346 |
+------------------+
1 row in set (0.04 sec)
2、ASCII(s)返回字符串s的第一個字符的ascii碼
bin(x)返回x的二進制編碼
hex()返回x的十六進制編碼
oct(x)返回x的八進制編碼
conv(x,f1,f2)將x從f1進制數變成f2進制數
例:
mysql> select conv(16,10,2);
+---------------+
| conv(16,10,2) |
+---------------+
| 10000 |
+---------------+
1 row in set (0.00 sec)
3、inet_aton(ip)函數:可以將ip地址轉化為數字表示,ip需要加引號
inet_ntoa(n)函數:可以將數字n轉換成ip的形式表示
例:mysql> select inet_aton('192.168.1.125');
+----------------------------+
| inet_aton('192.168.1.125') |
+----------------------------+
| 3232235901 |
+----------------------------+
1 row in set (0.64 sec)
4、get_lock(name,time)定義一個名稱為name持續時間長度為time秒的鎖,如果鎖定成功返回1,如果嘗試超時,返回0;如果遇到錯誤返回null。
release_lock(name)解除名稱為name的鎖。如果解鎖成功返回1;如果嘗試超時返回0;如果解鎖失敗返回null。
is_free_lock(name)判斷是否使用名為name的鎖,如果使用返回0,否則返回1.
例:mysql> select get_lock('my',10);
+-------------------+
| get_lock('my',10) |
+-------------------+
| 1 |
+-------------------+
1 row in set (0.08 sec)
5、benchmark(count,expr)函數將表達式expr重復執行count次,然後返回執行時間。主要用來判斷mysql處理表達式的速度。
6、convert(s using cs):將字符串s的字符集變成cs
例:mysql> select charset('abc'),charset(convert('abc' using utf8));
+----------------+------------------------------------+
| charset('abc') | charset(convert('abc' using utf8)) |
+----------------+------------------------------------+
| gbk | utf8 |
+----------------+------------------------------------+
1 row in set (0.00 sec)
6、cast(x as type)和convert(x,type)這兩個函數只對binary、char、date、datetime、time、signed integer、unsigned integer這些類型起作用。注意:此值改變輸出值的數據類型,沒有改變表中字段的類型。
例:mysql> select cast('2009-10-28 19:47:59' as date),convert('2009-10-28 19:47:59',time);
+-------------------------------------+-------------------------------------+
| cast('2009-10-28 19:47:59' as date) | convert('2009-10-28 19:47:59',time) |
+-------------------------------------+-------------------------------------+
| 2009-10-28 | 19:47:59 |
+-------------------------------------+-------------------------------------+
1 row in set (0.10 sec)