• 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    不同进制的数字之间进行相互转换

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    反之,我们也可以使用inet_ntoa函数将数值网络地址转换为字符串网络点地址,往下看:

    mysql> select inet_ntoa(3232235777);
    +-----------------------+
    | inet_ntoa(3232235777) |
    +-----------------------+
    | 192.168.1.1           |
    +-----------------------+
    1 row in set (0.00 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    所以,从上面来看,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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    可以从上面看到,这条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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从上面结果可以看到,实际上运行了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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    从上面看到,默认的字符集为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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

  • 相关阅读:
    前端新轮子Nue JS,号称要打造全新的Web生态!!!
    8.19学习记录 各种比赛的题目总结
    C# Modbus 通讯
    一文读懂简单查询代价估算
    ElasticSearch高阶操作
    网站登录界面制作(three.js 3D特效背景)+ boostrap导航栏实现 + jQuery移动窗口【附加源代码】
    私人社交群组平台Zusam
    Qt之延时总结
    北邮《计算机网络》网络层笔记
    五、Django ORM高级用法
  • 原文地址:https://blog.csdn.net/ouyangzhenxin/article/details/126027069