MySQL 函数介绍

本部分主要介绍:MySQL 的函数。函数分为:单行函数(目的:处理数据、筛选);聚合函数(目的:统计)

单行函数

  1. 介绍

    • 只对一行进行变换,每行返回一个结果
    • 可以嵌套
    • 参数可以是一个字段、一个表达式或一个值
    • 包含几种数据类型函数
      1. 字符串函数
      2. 数学函数
      3. 日期时间函数
      4. 加密函数
  2. 字符串函数

    • 如表

      函数 用法
      concat(S1, S2, ... Sn) 连接 S1, S2, ... Sn 为一个字符串
      concat_ws(s, S1, S2, ... Sn) 同函数 concat 一样,注释字符串之间有个 s
      char_length(s) 返回字符串 s 的字符数
      length(s) 返回字符串的字节数(utf-8 一个中文占 3 个字节)
      insert(str, index, len, instr) 将字符串 str 从第 index 开始,len 个长度的子字符串替换为 instr
      upper(s)/ucase(s) 将字符串转换为大写字母
      lower(s)/lcase(s) 将字符串转换为小写字母
      left(s, n) 返回字符串最左边的 n 个字符
      righ(s, n) 返回字符串最右边的 n 个字符
      lpad(str, len, pad) 用字符串 pad 对 str 字符串最左边进行填充,知道 str 长度为 len
      rpad(str, len, pad) 用字符串 pad 对 str 字符串最右边进行填充,知道 str 长度为 len
      ltrim(s) 去掉字符串 s 左侧空格
      rtrim(s) 去掉字符串 s 右侧空格
      trim(s) 去掉 s 开始和结尾处的空格
      trim([both], s1 form s) 去掉字符串 s,开始和结尾处的 s1
      trim([leading], s1 form s) 去掉字符串 s,开始处的 s1
      trim([trailing], s1 form s) 去掉字符串 s,结尾处的 s1
      repeat(str, n) 返回 str 重复 n 次结果
      replace(str, a, b) 用字符串 b 替换在 str 中出现的 a字符串
      strcmp(s1, s2) 比较字符串 s1 和 s2
      substring(s, index, len) 返回 s 字符串从 index 位置的 len 长度子字符串
    • 使用实例

      1. concat_ws(s, S1, S2,... Sn) 字符串拼接

        mysql> select concat_ws('-', bid, bname, price) as '拼接演示' from books;
        +----------------+
        | 拼接演示       |
        +----------------+
        | 1-java书-100   |
        | 2-mysql书-102  |
        | 3-css-90       |
        +----------------+
        3 rows in set (0.00 sec)
        
  3. 数值函数

    • 如表

      函数 用法
      abs(x) 返回 x 的绝对值
      ceil(x) 返回大于 x 的最小整数
      floor(x) 返回小于 x 的最小整数
      mod(x, y) 返回 x / y 的模
      rand() 返回 0-1 随机数
      round(x, y) 返回参数 x 保留 y 位小数的值(采用四舍五入)
      truncate(x, y) 返回参数 x 保留 y 位小数的值(采用阶段)
      squt(x) 返回 x 的平方
      pow(x, y) 返回 x 的 y 次方
  4. 日期函数

    • 如图(参数为时间数据类型)

      函数 用法
      curdate()/current_date() 返回当前日期
      curtime()/current_time() 返回当前时间
      now()/sysdate()/current_timestamp()/localtime()/localtimestamp() 返回当前系统日期时间
      year(date)/month(date)/day(date)/hour(time)/minute(time)/second(time) 返回具体时间值
      week(date)/weekofyear(date) 返回一年中的第几周
      dayofweek(date) 返回周几(周日为 1,周六为 7)
      weekday(date) 返回周几(周一为 0,周六为 6)
      dayname(date) 返回星期(monday,tuesday...)
      monthname(date) 返回月份(january)
      datediff(date1, date2)/timediff(time1, time2) 返回 date1 - date2 日期间隔/time1 - time2 时间间隔
      date_add(datetime, interval expr type) 返回与给定日期时间相差 interval 时间段的日期时间
      date_format(datetime, fmt) 按照字符串格式 fmt,格式化 datetime 值
      str_to_date(str, fmt) 按照字符串 fmt 格式解析 str为一个日期
    • date_add(datetime, interval expr type)

      1. 表达式类型

        参数类型 参数类型
        year year_month
        month day_hour
        day day_minute
        hour day_second
        minute hour_minute
        second hour_second
        minute_second
      2. 实例演示

        • select date_add(now(), interval 1 year); 在当前时间添加 1 年,返回时间

          mysql> select date_add(now(), interval 1 year);
          +----------------------------------+
          | date_add(now(), interval 1 year) |
          +----------------------------------+
          | 2021-05-28 16:13:23              |
          +----------------------------------+
          1 row in set (0.00 sec)
          
        • select date_add(now(), interval -1 year); 在当前时间减去 1 年

        • select date_add(now(), interval '1_2' year_month); 当前时间添加 1年 1 个月

    • date_format(datetime, fmt)str_to_date(str, fmt) 中格式说明

      1. 如表

        格式符(1) 说明(1) 格式符(2) 说明(2)
        %Y 以 4 位数表示年份 %y 以 2 位数表示年份
        %M 以英文(January)表示月份 %m 以 2 位数表示月份(01, 02)
        %b 以英文缩写(jan)表示月份 %c 以数字表示月份(1, 2)
        %D 以英文后缀名(1st, 2nd, 3rd)表示月份中天数 %d 以 2 位数表示月份中天数(01, 02)
        %e 以数字形式(1, 2, 3)表示月中的天数
        %H 以 2 为数(01, 02)表示小时数(24 小时制) %h 和 %I 以 2 为数(01, 02)表示小时数(12 小时制)
        %k 以数字形式(1, 2)表示小时数(24小时制) %I 以数字形式(1, 2)表示小时数(12 小时制)
        %i 以两位数表示分钟数(00, 01) %S 和 %s 以两位数表示秒数(00, 01)
        %W 一周中的星期名称(Sunday, Tuesday) %a 一周中星期的缩写(Sun, Mon, Tues)
        %w 以数字表示一周中的天数(0 = Sunday)
      2. 实例

        • 格式字符的使用,要看存入的时间的格式如何

          1. 存入时间格式 2020-01-01

            mysql> select date_format('2020-10-10' ,'%Y年%m月%d日');
            +----------------------------------------------+
            | date_format('2020-10-10' ,'%Y年%m月%d日')    |
            +----------------------------------------------+
            | 2020年10月10日                               |
            +----------------------------------------------+
            1 row in set (0.00 sec)
            
          2. 解析 2020-20-10 字符串

            mysql> select str_to_date('2020-10-10' ,'%Y-%m-%d');
            +---------------------------------------+
            | str_to_date('2020-10-10' ,'%Y-%m-%d') |
            +---------------------------------------+
            | 2020-10-10                            |
            +---------------------------------------+
            1 row in set (0.00 sec)
            
            
  5. 流程函数

    • 如表

      函数 用法
      if(vaule, t, f) 如果 value 位真,返回 t,否则返回 f
      ifnull(value1, valude2) 如果 value1不为空,返回 value,否则返回 value2
      case where 条件1 then result1 where 条件2 result2 ... [else result] end 相当于 if...else if...else
      case expr where 常量1 then 值1 where 常量2 then 值2 ... [else 值n] end 相当于switch...case
  6. 其它函数

    • 如表

      函数 用法
      datebase() 返回当前版本数据库
      version() 返回当前数据库版本
      user() 返回当前登录用户
      passwd(str) 返回 str 加密版,41 位长字符串
      md5(str) 返回 str MD5 值

聚合函数

说明:常用 5 个聚合函数,只能查看最后结果

  1. 介绍

    • 数据库为快速统计数据,提供了一些 聚合函数

    • 常用 5 个聚合函数

      函数 作用
      count(*/字段) 统计总行数,不用指出具体哪一行
      max(列) 表示求此列的最大值,指明具体哪一列
      min(列) 表示求此列的最小值,指明具体哪一列
      sum(列) 表示求此列的和,指明具体哪一列,该列数据必须为数字
      avg(列) 表示求此列的平均值,指明具体哪一列,该列数据必须为数字
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355