mysql还有哪些自带的函数呢?别到处找了,看这个就够了。

图片

格式化函数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_ntoainet_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...):带有usingconvert()函数被用来在不同的字符集之间转化数据。

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,运维工程师的行业是什么,
运维工程师的来历,运维工程师好找嘛,运维 工程师出入,运维工程师自学可行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值