为了简化操作,MySql提供了大量的函数给程序员使用(比如你想输入当前时间,可以调用now()函数)
插入语句的values()中,更新语句中,删除语句中,查询语句及其子句中。
- -- 用户表
- CREATE TABLE t_user (
- id int primary key AUTO_INCREMENT,
- uname varchar(40) DEFAULT NULL,
- age int DEFAULT NULL,
- sex int DEFAULT NULL
- );
-
- insert into t_user values (null,'zs',18,1);
- insert into t_user values (null,'ls',20,0);
- insert into t_user values (null,'ww',23,1);
- insert into t_user values (null,'zl',24,1);
- insert into t_user values (null,'lq',15,0);
- insert into t_user values (null,'hh',12,0);
- insert into t_user values (null,'wzx',60,null);
- insert into t_user values (null,'b',null,null);
-
-
语法
- if(expr1,expr2,expr3)
-
说明: 如果 expr1 是TRUE,则 IF()的返回值为expr2; 否则返回值则为 expr3。if() 的返回值为数字值或字符串值,具体情况视其所在语境而定。
示例
练习1:获取用户的姓名、性别,如果性别为1则显示1,否则显示0;要求使用if函数查询:
- SELECT uname, IF(sex, 1, 0) FROM t_user;
-
语法
- ifnull(expr1,expr2)
-
说明:假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。ifnull()的返回值是数字或是字符串,具体情况取决于其所使用的语境。
示例
练习1:获取用户的姓名、性别,如果性别为null则显示为1;要求使用ifnull函数查询:
- SELECT uname, IFNULL(sex, 1) FROM t_user;
-
小结
- if(exp1, exp2, exp3)
-
- ifnull(exp1, exp2)
-
字符串连接函数主要有2个:
函数或操作符 | 描述 |
---|---|
concat(str1, str2, …) | 字符串连接函数,可以将多个字符串进行连接 |
concat_ws(separator, str1, str2, …) | 可以指定间隔符将多个字符串进行连接; |
练习1:使用concat函数显示出 你好,uname 的结果
- SELECT CONCAT('你好,' , uname) FROM t_user;
-
练习2:使用concat_ws函数显示出 你好,uname 的结果
- SELECT CONCAT_WS(',', '你好', uname) FROM t_user;
-
字符串大小写处理函数主要有2个:
函数或操作符 | 描述 |
---|---|
upper(str) | 得到str的大写形式 |
lower(str) | 得到str的小写形式 |
练习1: 将字符串 hello 转换为大写显示
- SELECT UPPER('hello'); -- HELLO
-
练习2:将字符串 heLLo 转换为小写显示
- SELECT LOWER('heLLo'); -- hello
-
可以对字符串进行按长度填充满、也可以移除空格符
函数或操作符 | 描述 |
---|---|
trim(str) | 将str两边的空白符移除 |
练习1: 将用户id位8的用户的姓名的两边空白符移除
- -- 表中数据是:' lb ', 使用trim后是: 'lb'
- SELECT TRIM(uname) FROM t_user WHERE id = 8;
-
字符串也可以按条件进行截取,主要有以下可以截取子串的函数;
函数或操作符 | 描述 |
---|---|
substr()、substring() | 获取子串: 1:substr(str, pos) 、substring(str, pos); 2:substr(str, pos, len)、substring(str, pos, len) |
练习1:获取 hello,world 从第二个字符开始的完整子串
- SELECT SUBSTR("hello,world", 2); -- ello,world
-
练习2:获取 hello,world 从第二个字符开始但是长度为4的子串
- SELECT SUBSTR("hello,world", 2, 4); -- ello
-
小结
- concat(str1,str2,...)
- concat_ws(分隔符,str1,str2,...)
-
2.处理大小写的
- upper(str) 变大写
- lower(str) 变小写
-
- trim(str);
-
- substr(str, pos) str要截取的字符串,pos从哪里开始截取;
- substr(str, pos, len) str要截取的字符串,pos从哪里开始截取, len截取字符串的长度
-
mysql提供了一些用于获取特定时间的函数:
函数或操作符 | 描述 |
---|---|
current_date() | 获取当前日期,如 2022-5-18 |
current_time() | 获取当前时:分:秒,如:15:36:11 |
now() | 获取当前的日期和时间,如:2019-10-18 15:37:17 |
练习1:获取当前的日期
- select cruuent_date();
-
练习2: 获取当前的时间(仅仅需要时分秒)
- select current_time();
-
练习3: 获取当前时间(包含年月日时分秒)
- select now();
-
小结
- current_date()
-
- current_time()
-
- now()
-
常见的数值相关函数如下表:
函数或操作符 | 描述 |
---|---|
abs(x) | 获取数值x的绝对值 |
ceil(x) | 向上取整,获取不小于x的整数值 |
floor(x) | 向下取整,获取不大于x的整数值 |
pow(x, y) | 获取x的y次幂 |
rand() | 获取一个0-1之间的随机浮点数 |
练习1: 获取 -12 的绝对值
- select abs(-12);
-
练习2: 将 -11.2 向上取整
- select ceil(-11.2);
-
练习3: 将 1.6 向下取整
- select floor(1.6);
-
练习4: 获得2的32次幂的值
- select pow(2, 32);
-
练习5: 获得一个在0-100之间的随机数
- select rand()*100;
-
小结
- abs(x);
-
- ceil(x);
-
- floor(y)
-
- pow(x,y);
-
- rand();
-