只谈MySQL (第32天) 系统函数(下一)

MySQL提供的系统函数及运算子的清单如下列连结网页:
http://dev.mysql.com/doc/refman/5.1/en/func-op-summary-ref.html
前两天已讨论过部分的系统函数, 今天继续讨论...
MySQL的函数大列9大类:

流程控制函数字串函数数值函数日期时间函数全文检索函数型别转换函数XML函数其他函数用在Group By场合下的函数
今天介绍6. 型别转换函数, 7. XML函数, 8. 其他函数, 9. 用在Group By场合下的函数型别转换函数

BINARY: 将字串参数转换为二进位制的字串
这不是说会回传二进位制字串, 因为BINARY不是函数运作方式, 而是"修饰词"...我们用例子来讨论

mysql> SELECT 'a' = 'A';
-> 1 <-- 在MySQL大小写不分, 所以"'a' = 'A'"条件句的结果是真(True, 也可以1表示)
mysql> SELECT BINARY 'a' = 'A';
-> 0 <-- 用了Binary来"修饰", 'a'的二进位值和'A'的二进位值不同, 所以得到0(False)
mysql> SELECT 'a' = 'a ';
-> 1
mysql> SELECT BINARY 'a' = 'a ';
-> 0

CAST(), Convert(): 将第一个参数的值, 以第二个参数指定的资料型态来表示
可用于指定转换的资料型态有: BINARY[(N)], CHAR[(N)], DATE, DATETIME, DECIMAL[(M[,D])], SIGNED [INTEGER], TIME, UNSIGNED [INTEGER]
CAST('2009-11-13' AS DATE)和CONVERT('2009-11-13', DATE)都是一样的用法, CONVERT还有另外一种用法是搭配USING做字元集转换, 例如CONVERT('XYZ' USING utf8);将字串'XYZ'转换为utf8字元集

XML函数
现在的资料库多半支援XML的应用, MySQL也不例外, 在MySQL中与XMP有关的只有两个

ExtractValue()(v5.1.5):以XPath标记找到XML字串中的某一栏值, 我们来看看例子

mysql> SET @xml = 'XY';
Query OK, 0 rows affected (0.00 sec)

mysql> SET @i =1, @j = 2;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @i, ExtractValue(@xml, '//b[$@i]'); <-- '//b[$@i]'相当于'//b[1]', 这就是XPath标记, 找出第一个..的值
+------+--------------------------------+
| @i | ExtractValue(@xml, '//b[$@i]') |
+------+--------------------------------+
| 1 | X |
+------+--------------------------------+
1 row in set (0.00 sec)

mysql> SELECT @j, ExtractValue(@xml, '//b[$@j]');
+------+--------------------------------+
| @j | ExtractValue(@xml, '//b[$@j]') |
+------+--------------------------------+
| 2 | Y |
+------+--------------------------------+
1 row in set (0.00 sec)

mysql> SELECT @k, ExtractValue(@xml, '//b[$@k]');
+------+--------------------------------+
| @k | ExtractValue(@xml, '//b[$@k]') |
+------+--------------------------------+
| NULL | |
+------+--------------------------------+
1 row in set (0.00 sec)

UpdateXML()(v5.1.5): 传回被更新的XML片断

mysql> SELECT
-> UpdateXML('ccc', '/a', 'fff') AS val1,
-> UpdateXML('ccc', '/b', 'fff') AS val2,
-> UpdateXML('ccc', '//b', 'fff') AS val3,
-> UpdateXML('ccc', '/a/d', 'fff') AS val4,
-> UpdateXML('ccc', '/a/d', 'fff') AS val5
-> \G

val1: fff
val2: ccc
val3: fff
val4: cccfff
val5: ccc

其他函数
MySQL还提供一些其他系统不常见的函数, 诸如

位元运算函数: 例如BIT_COUNT
压密和压缩函数: 例如PASSWORD()、ENCODE()、DECODE()等等, PASSWORD()是用来产生加密密码的函数
MySQL资料库系统讯息函数: 像是SCHEMA()、ROW_COUNT()、VERSION()、USER()等等函数
其他杂项函数: 如SLEEP()函数
由于这些函数的用途相当广泛, 我只说明部份与MySQL资料库系讯息有关的函数, 其他的部份就留待有兴趣的网友自行研究MySQL文件了. 几个与资料库系统讯息相关的函数如下列:

BENCHMARK(): 重覆执行第二个参数的SQL指令, 共执行第一个参数指定的次数, 例如

mysql> SELECT BENCHMARK(1000000, (SELECT user FROM USER));
+---------------------------------------------+
| BENCHMARK(1000000, (SELECT user FROM USER)) | <-- 要注意的是, SELECT必须只有一个栏位, 多了就不能执行
+---------------------------------------------+
| 0 |
+---------------------------------------------+
1 row in set (0.06 sec)

mysql> SELECT BENCHMARK(100000000, (SELECT user FROM USER));
+-----------------------------------------------+
| BENCHMARK(100000000, (SELECT user FROM USER)) | <-- 增加执行次数, 看看会花多久时间
+-----------------------------------------------+
| 0 |
+-----------------------------------------------+
1 row in set (2.91 sec)

CHARSET()(v4.1.0): 传回参数的所属字元集, 例如CHARSET(CONVERT('XYZ' USING utf8))传回'utf8'

CONNECTION_ID(): 回传SESSION的资料库连线ID

CURRENT_USER(), CURRENT_USER: 回传SESSION的资料库连线帐号名称和主机名称, 例如'root@localhost'

DATABASE(), SCHEMA()(v5.0.2): 传回SESSION正在使用的资料库名称

FOUND_ROWS(): 回传SELECT指令找到的资料录数目, 使用上有些限制, 必需要在需要提供资料录数的SELECT指令中加入SQL_CALC_FOUND_ROWS修饰词, 例如

mysql> SELECT SQL_CALC_FOUND_ROWS user FROM USER;
+-------+
| user |
+-------+
| simon |
| root |
+-------+
2 rows in set (0.00 sec)

mysql> SELECT FOUND_ROWS();
+--------------+
| FOUND_ROWS() |
+--------------+
| 2 |
+--------------+
1 row in set (0.00 sec)

LAST_INSERT_ID(): 有时候, 我们会在资料表中用一些自动增加序号的栏位, 这个函数就是用来查询最近使用的最大序号为何的函数.

ROW_COUNT()(v5.0.1): 回传最近一次INSERT、UPDATE、DELETE指令所处理的资料录的数目

USER(), SESSION_USER(), SYSTEM_USER(): 由Client端连线到资料库的Session使用的帐号与主机名称

VERSION(): 回传正在使用的MySQL资料库的版本编号

<<还有最后一个与GROUP BY有关的函数, 放在另一篇了...续>>


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章