1. 字符串(string)函数

示意表:

函数 功能
CONCAT(S1, S2,… Sn) 字符串拼接将S1,S2,…Sn拼接成一个字符串
LOWER (str) 将字符串str全部转为小写
UPPER (str) 将字符串str全部转为大写
LPAD (str,n,内容) 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD (str,n,内容) 右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM (str) 去掉字符串头部和尾部的空格
SUBSTRING (str,start,len) 返回从字符串str从start位置起的len个长度的字符串

案例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
select concat ('name', 'is') ; 
得:nameis

select lower ('Yyds');
得:yyds

select upper ('Yyds');
得:YYDS

select lpad ('3', 4, '*');
得:****3

select rpad ('3', 4, '*');
得:3****

select trim (' yyds ');
得:'yyds'

select substring ('hello yyds, 2, 4') ;
得:ello

由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。
比如:
1号员工的工号应该为00001
update employee set worknumber = lpad(worknumber, 5, '0') ;

2. 数值函数

  1. 示表:
函数 功能
CEIL (x) 向上取整
FLO0R (x) 向下取整
MOD (x,y) 返回×/y的模
RAND () 返回0-1内的随机数
ROUND (x,y) 求参数×的四舍五入的值,保留y位小数
  1. 案例
1
2
3
4
5
6
7
8
9
  select ceil (4.3) ;	# 得:5
select floor (4.9) ; # 得:4
select mod (3,4) ; # 得:1
select rand () # 得:0.10.3
select round (3.14563, 3) # 得:3.146


# 通过数据库的函数,生成一个六位数的随机验证码
select lpad( round( rand ()*1000000, 0), 6, '0' ) ;

3. 日期函数

  1. 示表:
函数 功能
CURDATE () 返回当前日期
例:
select curdate ();
>> 2024-01-16
CURTIME () 返回当前时间
例:
select curtime ();
>> 23: 45: 23
NOW () 返回当前日期和时间
例:
select now ();
>> 2024-01-16 23: 45: 23`
YEAR (date) 获取指定date的年份
例:
select year ( now());
>> 2024
MONTH (date) 获取指定date的月份
例:
select month (now());
>> 01
DAY (date) 获取指定date的日期
例:
select day (now());
>> 16
DATE_ADD (date, INTERVAL expr type) 返回一个日期或时间值加上一个时间间隔e×pr后的时间值(当前为2024-01-16 23:45:23)
例:
  • select date_add( now(), interval 20 year );

  • >> 2044-01-16 23:45:23
  • select date_add( now(), interval 10 day );

  • >> 2024-01-26 23:45:23
  • select date_add( now(), interval 3 month );

  • >> 2024-04-16 23:45:23
    DATEDlFF (date1, date2) 返回起始时间date1和结束时间date2之间的天数
    例:

    select datediff ( '2024-01-16', '2024-01-26' );
    >> 10天
    1. 案例:
      查询所有员工的入职天数,并根据入职天数进行倒序排序
      select name, datediff ( curdate(), entrydate ) as 'date_d' from employee oder by date_d ;

    4. 流程函数

    1. 示表:
    函数 功能
    IF( value, t, f ) 如果value(数值)为真,则返回t,否则返回f
    例:
    select if(ture, 'ok', 'error');
    >> ok
    IFNULL( value1, value2) 如果value1(数值1)不为空,返回value1,否则返回value2
    例:
  • select if('ok', 'defalut') ;

  • >>ok
  • selct if('', 'defalut') ;

  • >> #为空
  • selct if(null, 'defalut') ;

  • >>defalut
    CASE WHEN [val1] THEN [res1]…ELSE [defalut] END 如果val1(值1)为真,返回res1(结果1),…否则返回default默认值
    例:
    CASE [expr] WHEN [val1] THEN [res1]…ELSE [defalut] END 如果expr(表达式)的值等于val1,返回res1,…否则返回defalut默认值
    1. . 案例:
    • a. 查询employee表的员工姓名和工作地址 (如果是上海或北京,返回一线城市, 其他则返回二线城市)

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      i. select name, 
      (case
      when workaddress = '上海' then '一线城市' when workaddress = '北京' then '一线城市' else '二线城市'
      end ) as '工作地址'
      from employee;

      ii. select name,
      (case
      workaddress when '上海' then '一线城市' when '北京' then '一线城市' else '二线城市'
      end ) as '工作地址'
      from employee;
    • b. 统计班级各个学员的成绩,展示的规则如下

    >=85,返回优秀
    >=60,返回及格
    否则,返回不及格

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 建表:
    create table score(
    id int ,
    name varchar(20) ,
    math int ,
    chinese ,
    english
    ) ;


    insert into score (id, name, math, chinese, english) values (1, 'yi', 67, 88 ,95 ), (2, 'er', 23, 66, 90), (3, 'san', 56, 98, 76) ;


    # 执行:
    select id, name
    (case when math >=85 then '优秀' when math >=60 then '及格' else '不及格' end ) as '数学'
    (case when chinese >=85 then '优秀' when chinese >=60 then '及格' else '不及格' end ) as '语文'
    (case when english >=85 then '优秀' when english >=60 then '及格' else '不及格' end ) as '英语'
    from score;