MySQL-其他函数(补充)
格式化函数
FORMAT(x, n)
例:将数字x进行格式化,以四舍五入的方式保留n位小数,结果以字符串的形式返回
mysql> select format(12.3456,3),format(2.2,4),format(9.333,0);
+-------------------+---------------+-----------------+
| format(12.3456,3) | format(2.2,4) | format(9.333,0) |
+-------------------+---------------+-----------------+
| 12.346 | 2.2000 | 9 |
+-------------------+---------------+-----------------+
1 row in set (0.00 sec)
不同进制的数字进行转换的函数
CONV()
例:用于不同进制数之间的转换
mysql> select conv('a',16,2), # 将16进制的a转换为2进制-> conv(15,10,2), # 将10进制的15转换为2进制-> conv(15,10,8), # 将10进制的15转换为8进制-> conv(15,10,16); # 将10进制的15转换为16进制
+----------------+---------------+---------------+----------------+
| CONV('a',16,2) | CONV(15,10,2) | CONV(15,10,8) | CONV(15,10,16) |
+----------------+---------------+---------------+----------------+
| 1010 | 1111 | 17 | F |
+----------------+---------------+---------------+----------------+
IP 地址与数字互相转换的函数
INET_ATON(expr) 、INET_NTOA(expr)
例1:INET_ATON(expr) 用于将网络地址转换为一个代表该地址数值的整数
mysql> select inet_aton('192.168.1.1');
+--------------------------+
| inet_aton('192.168.1.1') |
+--------------------------+
| 3232235777 |
+--------------------------+
1 row in set (0.00 sec)
例2:INET_NTOA(expr)将一个整数转换为网络地址,如果超过10位数值则返回null
mysql> select inet_ntoa('3232235777');
+-------------------------+
| inet_ntoa('3232235777') |
+-------------------------+
| 192.168.1.1 |
+-------------------------+
1 row in set (0.00 sec)
加锁函数和解锁函数
GET_LOCK(str, timeout) 、RELEASE_LOCAK(str) 、 IS_FREE_LOCK(str) 、IS_USED_LOCK(str)
例1:GET_LOCK(str, timeout) 使用字符串 str 来得到一个锁,持续时间 timeout 秒
若成功得到锁,则返回 1
若操作超时,则返回 0
若发生错误,则返回 NULL
mysql> select get_lock('lock1',10);
+----------------------+
| get_lock('lock1',10) |
+----------------------+
| 1 | # 返回结果为1,说明成功得到了一个名称为'lock1'的锁,持续时间为10秒
+----------------------+
1 row in set (0.03 sec)
例2:RELEASE_LOCAK(str) 用于解开被 GET_LOCK() 获取的,用字符串 str 所命名的锁
若锁被解开,则返回 1
若该线程尚未创建锁,则返回 0
若命名的锁不存在,则返回 NULL
若该锁从未被 GET_LOCK() 的调用获取,或锁已经被提前解开,则该锁不存在返回null
mysql> select release_lock('lock1');
+-----------------------+
| release_lock('lock1') |
+-----------------------+
| 1 | # 返回值为1说明解锁成功
+-----------------------+
1 row in set (0.00 sec)
例3:IS_FREE_LOCK(str) 检查名为 str 的锁是否可以使用
若锁可以使用,则返回 1
若锁正在被使用,则返回 0
若出现错误,则返回 NULL
mysql> select is_free_lock('lock1');
+-----------------------+
| is_free_lock('lock1') |
+-----------------------+
| 1 |# 返回值为1说明锁可以使用
+-----------------------+
1 row in set (0.02 sec)
例4:IS_USED_LOCK(str) 用于检查名为 str 的锁是否正在被使用,若被封锁,则返回使用该锁的客户端的连接标识符,否则返回 NULL
mysql> select is_used_lock('lock1');
+-----------------------+
| is_used_lock('lock1') |
+-----------------------+
| 4 | # 返回结果为当前连接ID(每台主机返回的不同,可以用CONNECTION_ID()函数查看本机id),表示名称为'lock1'的锁正在被使用
+-----------------------+
1 row in set (0.00 sec)
mysql> select is_used_lock('a');
+-------------------+
| is_used_lock('a') |
+-------------------+
| NULL |
+-------------------+
1 row in set (0.00 sec)
重复执行指定操作的函数
BENCHMARK(count, expr)
例:BENCHMARK(count, expr) 用于重复 count 次执行表达式 expr
可以用于计算 MySQL 处理表达式的速度
可以在 MySQL 客户端内部报告语句执行的时间
mysql> select password('new_pass');
+-------------------------------------------+
| password('new_pass') |
+-------------------------------------------+
| *B6408F4D32E8BEC631EF224B6F743F3340E6E744 |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec) # 执行一次加密用时0.00秒
mysql> select benchmark(5000000,password('new_pass'));
+-----------------------------------------+
| benchmark(5000000,password('new_pass')) |
+-----------------------------------------+
| 0 |
+-----------------------------------------+
1 row in set, 1 warning (1.12 sec) # 执行五百万次加密用时1.12秒
改变字符集的函数
CONVERT(... USING ...)
例:用于改变字符串的默认字符集
mysql> select charset('abc');
+----------------+
| charset('abc') |
+----------------+
| utf8 | # 默认utf8字符集
+----------------+
1 row in set (0.01 sec)
mysql> select charset(convert('abc' using latin1));
+--------------------------------------+
| charset(convert('abc' using latin1)) |
+--------------------------------------+
| latin1 | #修改后字符集为latin1
+--------------------------------------+
1 row in set (0.01 sec)
改变数据类型的函数
CAST(x, AS type) 、CONVERT(x, type)
例1:CAST(x, AS type) 用于将一个数据类型的值转换为另一个数据类型的值 CONVERT(x, type) 用于将一个数据类型的值转换为另一个数据类型的值
mysql> select cast(100 as char(2)); # 将整数类型100转换为带有两个显示宽度的字符串类型,结果为'10'
+----------------------+
| cast(100 as char(2)) |
+----------------------+
| 10 |
+----------------------+
1 row in set, 1 warning (0.01 sec)
例2:CONVERT(x, type) 用于将一个数据类型的值转换为另一个数据类型的值
mysql> select convert(100,char(2));# 将整数类型的100转换为带有两个显示宽度的字符串类型,结果为'10'
+----------------------+
| convert(100,char(2)) |
+----------------------+
| 10 |
+----------------------+
1 row in set, 1 warning (0.00 sec)