格式化函数FPRMAT(x,n)
format(x,n)
将数字x
进行格式化,并以四舍五入的方式保留小数点后n
位,结果以字符串的形式返回。
如果n
为0,则返回结果函数不含小数部分。
mysql> select format(999.12345678, 5), format(888.12345678, 0);
+-------------------------+-------------------------+
| format(999.12345678, 5) | format(888.12345678, 0) |
+-------------------------+-------------------------+
| 999.12346 | 888 |
+-------------------------+-------------------------+
1 row in set (0.00 sec)
mysql>
不同进制的数字之间进行相互转换
conv(n, from_base, to_base)
这个函数可以进行不同进制数之间的相互转换。比如将16进制的数字转换成2进制,亦或者将2进制的数字转换成10进制都可以。
返回值为数值n
的字符串表示,由from_base
进制转化为to_base
进制。如果任意一个参数为null
的话,那么返回值就是null
。
mysql> select conv('a', 16, 10) as coll, conv(123, 10, 2) as coll_1, conv(123, 10, 16) as coll_2, conv(123, 10, 8) as coll_3;
+------+---------+--------+--------+
| coll | coll_1 | coll_2 | coll_3 |
+------+---------+--------+--------+
| 10 | 1111011 | 7B | 173 |
+------+---------+--------+--------+
1 row in set (0.00 sec)
mysql>
IP地址和数字相互转换的函数
inet_auto(expr)
给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数。地址可以是4或者8bit
地址。
mysql> select inet_aton('192.168.1.1');
+--------------------------+
| inet_aton('192.168.1.1') |
+--------------------------+
| 3232235777 |
+--------------------------+
1 row in set (0.00 sec)
mysql>
反之,我们也可以使用inet_ntoa
函数将数值网络地址转换为字符串网络点地址,往下看:
mysql> select inet_ntoa(3232235777);
+-----------------------+
| inet_ntoa(3232235777) |
+-----------------------+
| 192.168.1.1 |
+-----------------------+
1 row in set (0.00 sec)
mysql>
所以,从上面来看,inet_ntoa
和inet_aton
互为反函数。
加锁函数和解锁函数
get_lock(str, timeout)
设法使用字符串str
给定的名字得到一个锁,超时时间为timeout
秒。如果成功得到了锁的话,则返回为1,如果操作超时的话,则返回为0;一旦发生错误,则返回null
。
release_lock(str)
解开被get_lock()
获取的、用字符串str
锁命名的锁。如果锁被解开了,则返回为1,如果该线程尚未创建锁,则返回0(此时锁没有被解开);如果命名的锁不存在,则返回null
。如果这个锁从未被get_lock()
的调用获取,或锁已经被提前解开,则该锁不存在。
is_free_lock(str)
检查名字为str
的锁是否可以使用,如果这个锁可以使用,则返回1(没有人使用这个锁);如果这个锁正在被使用,则返回0;出现错误的话,则返回null
(像不正确的参数)。
if_used_lock(str)
检查名字为str
的锁是否正在被使用,如果这个封了锁,则返回使用该锁的客户端的连接标识符,否则的话,就返回null
。
mysql> select get_lock('yunweijia', 15) as getlock, is_used_lock('yunweijia') as isusedlock, is_free_lock('yunweijia') as isfreelock, release_lock('yunweijia') as releaselock;
+---------+------------+------------+-------------+
| getlock | isusedlock | isfreelock | releaselock |
+---------+------------+------------+-------------+
| 1 | 8 | 0 | 1 |
+---------+------------+------------+-------------+
1 row in set (0.01 sec)
mysql>
get_lock('yunweijia', 15)
:返回结果为1,说明成功得到了一个名称为‘yunweijia’的锁,持续时间为15秒;
is_used_lock('yunweijia')
:返回结果为当前连接id
,表示名称为yunweijia
的锁正在被使用;
is_free_lock('yunweijia')
:返回结果是0,说明名称为yunweijia
的锁正在被使用;
release_lock('yunweijia')
:返回值为1,说明解锁成功了。
重置执行指定操作的函数
benchmark(count, expr)
函数重复count
次数执行表达式expr
。
他可以用机计算mysql
处理表达式的速度。结果值一般是0(0只是表示处理过程很快,并不是没有花费时间)。另外一个作用是它可以在mysql
客户端内部报告语句执行的时间。
举个例子:
首先我们使用sha
函数加密一个密码,如下:
mysql> select sha('yunweijia');
+------------------------------------------+
| sha('yunweijia') |
+------------------------------------------+
| 683501978a90d76d420b893cd7e00c8efde8e8f3 |
+------------------------------------------+
1 row in set (0.00 sec)
mysql>
可以从上面看到,这条sql
执行时间为0.00 sec
,然后我们再使用benchmark
函数,重复执行这个命令50000次,再看下运行时间;
mysql> select benchmark(50000, sha('yunweijia'));
+------------------------------------+
| benchmark(50000, sha('yunweijia')) |
+------------------------------------+
| 0 |
+------------------------------------+
1 row in set (0.03 sec)
mysql>
从上面结果可以看到,实际上运行了0.03秒。
改变字符集的函数
convert(...using...)
:带有using
的convert()
函数被用来在不同的字符集之间转化数据。
mysql> select charset('yunweijia') as coll, charset(convert('yunweijia' using latin1)) as coll_1;
+---------+--------+
| coll | coll_1 |
+---------+--------+
| utf8mb3 | latin1 |
+---------+--------+
1 row in set (0.00 sec)
mysql>
从上面看到,默认的字符集为utf8mb3
,通过convert
将字符串yunweijia
的默认字符集改为latin1
。
改变数据类型的函数
cast(x, as type)
和convert(x, type)
函数将一个类型的值转换为另一个类型的值,可转换的type
有以下几种:
-
binary
-
char(n)
-
date
-
time
-
datetime
-
decimal
-
signed
-
unsigned
mysql> select cast(1000 as char(3)), convert('2022-07-18 09:09:00', time);
+-----------------------+--------------------------------------+
| cast(1000 as char(3)) | convert('2022-07-18 09:09:00', time) |
+-----------------------+--------------------------------------+
| 100 | 09:09:00 |
+-----------------------+--------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql>
从上面可以看到,select cast(1000 as char(3))
将整数数据1000,转换为带有两个显示宽度的字符串类型,结果为100;
convert('2022-07-18 09:09:00', time)
将datetime
类型的值转换为time
类型值,结果是09:09:00
。
至此,本文结束。
更多内容请转至VX公众号 “运维家” ,获取最新文章。
------ “运维家” ------
------ “运维家” ------
------ “运维家” ------
临武县运维工程师培训,温州运维工程师,通达oa实施运维工程师,呼叫中心运维工程师面试
腾讯idc运 维工程师面试,运维工程师samba,运维工程师的行业是什么,
运维工程师的来历,运维工程师好找嘛,运维 工程师出入,运维工程师自学可行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)