文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql中有哪些常用函数

2024-04-02 19:55

关注

mysql中有哪些常用函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

 数学函数

所有的数学函数在一个出错的情况下返回NULL

字符串函数
对于针对字符串位置的操作,第一个位置被标记为1。
MySQL必要时自动变换数字为字符串,并且反过来也如此:
mysql> SELECT 1+"1";
        -> 2
mysql> SELECT CONCAT(2,' test');
        -> '2 test'
如果你想要明确地变换一个数字到一个字符串,把它作为参数传递到CONCAT()。
如果字符串函数提供一个二进制字符串作为参数,结果字符串也是一个二进制字符串。被变换到一个字符串的数字被当作是一个二进制字符串。这仅影响比较。
 
 
 
日期和时间函数
 
 
对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。
这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:
mysql> SELECT something FROM table
           WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
 
 
其他函数

  • DATABASE()

  • 返回当前的数据库名字。

    mysql> select DATABASE();
            -> 'test'

    如果没有当前的数据库,DATABASE()返回空字符串。

  • USER()


  • SYSTEM_USER()


  • SESSION_USER()

  • 返回当前MySQL用户名。

    mysql> select USER();
            -> 'davida@localhost'

    在MySQL 3.22.11或以后版本中,这包括用户名和客户主机名。你可以象这样只提取用户名部分(值是否包括主机名部分均可工作):

    mysql> select substring_index(USER(),"@",1);
            -> 'davida'
  • PASSWORD(str)

  • 从纯文本口令str计算一个口令字符串。该函数被用于为了在user授权表的Password列中存储口令而加密MySQL口令。

    mysql> select PASSWORD('badpwd');
            -> '7f84554057dd964b'

    PASSWORD()加密是非可逆的。PASSWORD()不以与Unix口令加密的相同的方法执行口令加密。你不应该假定如果你的Unix 口令和你的MySQL口令是一样的,PASSWORD()将导致与在Unix口令文件存储的相同的加密值。见ENCRYPT()

  • ENCRYPT(str[,salt])

  • 使用Unix crypt()系统调用加密strsalt参数应该是一个有2个字符的字符串。(MySQL 3.22.16中,salt可以长于2个字符。)

    mysql> select ENCRYPT("hello");
            -> 'VxuFAJXVARROc'

    如果crypt()在你的系统上不可用,ENCRYPT()总是返回NULLENCRYPT()只保留str起始8个字符而忽略所有其他,至少在某些系统上是这样。这将由底层的crypt()系统调用的行为决定。

  • ENCODE(str,pass_str)

  • 使用pass_str作为口令加密str。为了解密结果,使用DECODE()。结果是一个二进制字符串,如果你想要在列中保存它,使用一个BLOB列类型。

  • DECODE(crypt_str,pass_str)

  • 使用pass_str作为口令解密加密的字符串crypt_strcrypt_str应该是一个由ENCODE()返回的字符串。

  • MD5(string)

  • 对字符串计算MD5校验和。值作为一个32长的十六进制数字被返回可以,例如用作哈希(hash)键。

    mysql> select MD5("testing")
            -> 'ae2b1fca515949e5d54fb22b8ed95575'

    这是一个“RSA数据安全公司的MD5消息摘要算法”。

  • LAST_INSERT_ID([expr])

  • 返回被插入一个AUTO_INCREMENT列的最后一个自动产生的值。见20.4.29 mysql_insert_id()

    mysql> select LAST_INSERT_ID();
            -> 195

    产生的最后ID以每个连接为基础在服务器被维护,它不会被其他客户改变。如果你更新另外一个有非魔术值(即,不是NULL和不是0的一个值)的AUTO_INCREMENT列,它甚至不会被改变。如果expr作为一个参数在一个UPDATE子句的LAST_INSERT_ID()里面给出,那么参数值作为一个LAST_INSERT_ID()值被返回。这可以用来模仿顺序:首先创建表:

    mysql> create table sequence (id int not null);
    mysql> insert into sequence values (0);

    然后表能被用来产生顺序号,象这样:

    mysql> update sequence set id=LAST_INSERT_ID(id+1);

    你可以不调用LAST_INSERT_ID()而产生顺序,但是这样使用函数的实用程序在服务器上自动维护ID值作为最后自动产生的值。你可以检索新的ID值,就像你能读入正常MySQL中的任何正常的AUTO_INCREMENT值一样。例如,LAST_INSERT_ID()(没有一个参数 )将返回新ID。C API函数mysql_insert_id()也可被用来得到值。

  • FORMAT(X,D)

  • 格式化数字X为类似于格式'#,###,###.##',四舍五入到D为小数。如果D0,结果将没有小数点和小数部分。

    mysql> select FORMAT(12332.123456, 4);
            -> '12,332.1235'
    mysql> select FORMAT(12332.1,4);
            -> '12,332.1000'
    mysql> select FORMAT(12332.2,0);
            -> '12,332'
  • VERSION()

  • 返回表明MySQL服务器版本的一个字符串。

    mysql> select VERSION();
            -> '3.22.19b-log'
  • GET_LOCK(str,timeout)

  • 试图获得由字符串str给定的一个名字的锁定,第二个timeout为超时。如果锁定成功获得,返回1,如果尝试超时了,返回0,或如果发生一个错误,返回NULL(例如从存储器溢出或线程用mysqladmin kill被杀死)。当你执行RELEASE_LOCK()时、执行一个新的GET_LOCK()或线程终止时,一个锁定被释放。该函数可以用来实现应用锁或模拟记录锁,它阻止其他客户用同样名字的锁定请求;赞成一个给定的锁定字符串名字的客户可以使用字符串执行子协作建议的锁定。

    mysql> select GET_LOCK("lock1",10);
            -> 1
    mysql> select GET_LOCK("lock2",10);
            -> 1
    mysql> select RELEASE_LOCK("lock2");
            -> 1
    mysql> select RELEASE_LOCK("lock1");
            -> NULL

    注意,第二个RELEASE_LOCK()调用返回NULL,因为锁"lock1"自动地被第二个GET_LOCK()调用释放。

  • RELEASE_LOCK(str)

  • 释放字符串str命名的通过GET_LOCK()获得的锁。如果锁被释放,返回1,如果锁没被这个线程锁定(在此情况下锁没被释放)返回0,并且如果命名的锁不存在,返回NULL。如果锁从来没有通过调用GET_LOCK()获得或如果它已经被释放了,锁将不存在。

  • BENCHMARK(count,expr)

  • BENCHMARK()函数重复countTimes次执行表达式expr,它可以用于计时MySQL处理表达式有多快。结果值总是0。意欲用于mysql客户,它报告查询的执行时间。

    mysql> select BENCHMARK(1000000,encode("hello","goodbye"));
    +----------------------------------------------+
    | BENCHMARK(1000000,encode("hello","goodbye")) |
    +----------------------------------------------+
    |                                            0 |
    +----------------------------------------------+
    1 row in set (4.74 sec)

    报告的时间是客户端的经过时间,不是在服务器端的CPU时间。执行BENCHMARK()若干次可能是明智的,并且注意服务器机器的负载有多重来解释结果。


GROUP BY子句一起使用的函数

如果你在不包含GROUP BY子句的一个语句中使用聚合函数,它等价于聚合所有行。

  • COUNT(expr)

  • 返回由一个SELECT语句检索出来的行的非NULL值的数目。

    mysql> select student.student_name,COUNT(*)
               from student,course
               where student.student_id=course.student_id
               GROUP BY student_name;

    COUNT(*)在它返回的检索出来的行数目上有些不同,不管他们是否包含NULL值。如果SELECT从一个表检索,或没有检索出其他列并且没有WHERE子句,COUNT(*)被优化以便快速地返回。例如:

    mysql> select COUNT(*) from student;
  • COUNT(DISTINCT expr,[expr...])

  • 返回一个不同值的数目。

    mysql> select COUNT(DISTINCT results) from student;

    MySQL中,你可以通过给出一个表达式列表以得到不同的表达式组合的数目。在 ANSI SQL中,你可能必须在CODE(DISTINCT ..)内进行所有表达式的连接。

  • AVG(expr)

  • 返回expr的平均值。

    mysql> select student_name, AVG(test_score)
               from student
               GROUP BY student_name;
  • MIN(expr)


  • MAX(expr)

  • 返回expr的最小或最大值。MIN()MAX()可以有一个字符串参数;在这种的情况下,他们返回最小或最大的字符串值。

    mysql> select student_name, MIN(test_score), MAX(test_score)
               from student
               GROUP BY student_name;
  • SUM(expr)

  • 返回expr的和。注意,如果返回的集合没有行,它返回NULL!

  • STD(expr)


  • STDDEV(expr)

  • 返回expr标准差(deviation)。这是对 ANSI SQL 的扩展。该函数的形式STDDEV()是提供与Oracle的兼容性。

  • BIT_OR(expr)

  • 返回expr里所有位的位或。计算用 64 位(BIGINT)精度进行。

  • BIT_AND(expr)

  • 返回expr里所有位的位与。计算用 64 位(BIGINT)精度进行。

MySQL扩展了GROUP BY的用法。你可以不出现在的GROUP BY部分的SELECT表达式中使用列或计算,这表示这个组的任何可能值。你可以使用它是性能更好,避免在不必要的项目上排序和分组。例如,你在下列查询中不需要在customer.name上聚合:

mysql> select order.custid,customer.name,max(payments)
       from order,customer
       where order.custid = customer.custid
       GROUP BY order.custid;

在 ANSI SQL中,你将必须将customer.name加到GROUP BY子句。在MySQL中,名字是冗余的。

如果你从GROUP BY部分省略的列在组中不是唯一的,不要使用这个功能。

在某些情况下,你可以使用MIN()MAX()获得一个特定的列值,即使它不是唯一的。下例给出从包含sort列中最小值的行的column值:

substr(MIN(concat(sort,space(6-length(sort)),column),7,length(column)))

注意,如果你正在使用MySQL 3.22(或更早)或如果你正在试图遵从ANSI SQL,你不能在GROUP BYORDER BY子句中使用表达式。你可以通过使用表达式的一个别名解决此限制:

mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
           GROUP BY id,val ORDER BY val;

MySQL3.23中,你可以这样做:

mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND();


关于mysql中有哪些常用函数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯