一、字符串函数
| 函数 | 描述 |
|---|
| CONCAT(s1,s2,…,sn) | 连接s1,s2,…,sn为一个字符串 |
| CONCAT_WS(separator,s1,s2,…,sn) | 连接s1一直到sn,并且中间以separator作为分隔符 |
| CHAR_LENGTH(s) | 返回字符串s的字符数 |
| LENGTH(s) | 返回字符串s的字节数,和字符集有关 |
| INSERT(str,index,len,instr) | 将字符串str从第index位置开始,len个字符长的子串替换为字符串instr |
| UPPER(s)或UCASE(s) | 将字符串s的所有字母转换成大写字母 |
| LOWER(s)或LCASE(s) | 将字符串s的所有字母转换成小写字母 |
| LEFT(s,n) | 返回字符串s最左边的n个字符 |
| RIGHT(s,n) | 返回字符串s最右边的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 FROM s) | 去掉字符串s开始与结尾的s1 |
| TRIM([LEADING] s1 FROM s) | 去掉字符串s开始处的s1 |
| TRIM([TRAILING] s1 FROM 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个字符 |
CREATE TABLE t_user (
id INT(11) NOT NULL AUTO_INCREMENT,
uname VARCHAR(40) DEFAULT NULL,
age INT(11) DEFAULT NULL,
sex INT(11) DEFAULT NULL,
PRIMARY KEY (id)
);
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,'lb',NULL,NULL);
SELECT CONCAT("你好,",uname) FROM t_user
SELECT CONCAT_WS(",","你好",uname,"很高兴认识你") FROM t_user
SELECT UPPER("hello")
SELECT UPPER(uname) FROM t_user
SELECT TRIM(uname) FROM t_user
SELECT SUBSTRING("hello,world",2)
SELECT SUBSTRING("hello,world",2,4)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
二、数值函数
| 函数 | 用法 |
|---|
| 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位小数的结果 |
| SQRT(x) | 返回x的平方根 |
| POW(x,y) | 返回x的y次方 |
SELECT ABS(-12)
SELECT CEIL(-11.2)
SELECT FLOOR(1.6)
SELECT POW(2,32)
SELECT RAND()*100
SELECT CEIL(RAND()*100)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
三、日期函数
| 函数 | 用法 |
|---|
| CURDATE()或CURRENT_DATE() | 返回当前日期 |
| CURTIME()或CURRENT_TIME() | 返回当前时间 |
| NOW()/SYSDATE()/CURRENT_TIMESTAMP()/LOCALTIME()/LOCALTIMESTAMO() | 返回当前系统日期时间 |
| YEAR(date)/MONTH(date)/DAY(date)/HOUR(time)/MINUTE(time)/SECOND(time) | 返回具体的时间值 |
| WEEK(date)/WEEKOFYEAR(date) | 返回一年中的第几周 |
| DAYOFWEEK() | 返回今天是一周的第几天,注意:周日是1,周一是2,…周六是7 |
| WEEKDAY(date) | 返回周几,注意,周一是0,周二是1,…周日是6 |
| DAYNAME(date) | 返回星期:MONDAY,TUESDAY,…SUNDAY |
| MONTHNAME(date) | 返回月份:January,… |
| DATEDIFF (date1,date2)/TIMEDIFF(time1,time2) | 返回date1-date2的日期间隔、返回time1-time2的时间间隔 |
| DATE_ADD(datetime,INTERVAL exprtype) | 返回与给定日期时间相差INTERVAL时间段的日期时间 |
| DATE_FORMAT(datetime.fmt) | 按照字符串fmt格式化日期datetime值 |
| STR_TO_DATE(str,fmt) | 按照字符串fmt对str进行解析,解析为一个日期 |
| 格式符 | 说明 |
|---|
| %Y | 4位数字表示年份 |
| %y | 表示两位数字表示年份 |
| %M | 月名表示月份(January,…) |
| %m | 两位数字表示月份(01,02,03…) |
| %b | 缩写的月名(Jan,Feb,…) |
| %c | 数字表示月份(1,2,3…) |
| %D | 英文后缀表示月中的天数(1st,2nd,3rd…) |
| %d | 两位数字表示月中的天数(01,02…) |
| %e | 数字形式表示月中的天数(1,2,3,4,5…) |
| %H | 两位数字表示小数,24小时制(01,02…) |
| %h和%I | 两位数字表示小时,12小时制(01,02…) |
| %k | 数字形式的小时,24小时制(1,2,3…) |
| %I | 数字形式表示小时,12小时制(1,2,3,4…) |
| %i | 两位数字表示分钟(00,01,02) |
| %S和%s | 两位数字表示秒(00,01,02…) |
| %W | 一周中的星期名称(Sunday…) |
| %a | 一周中的星期缩写(Sun,Mon,Tues,…) |
| %w | 以数字表示周中的天数(0=Sunday,1=Monday…) |
| %j | 以3位数字表示年中的天数(001,002…) |
| %U | 以数字表示年中的第几周(1,2,3…),其中Sunday为周中第一天 |
| %u | 以数字表示年中的第几周(1,2,3…)其中Monday为周中第一天 |
| %T | 24小时制 |
| %r | 12小时制 |
| %p | AM或PM |
| %% | 表示% |
SELECT DATE_FORMAT(LOCALTIME(),"%Y-%m-%d %H:%i:%S")
SELECT CURDATE()
SELECT CURTIME()
SELECT NOW()
SELECT DATEDIFF("2023-01-01",NOW())
SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
四、流程函数
| 函数 | 用法 |
|---|
| IF(value,t,f) | 如果value是真,返回t,否则返回f |
| IFNULL(value1,value2) | 如果value1不为空,返回value1,否则返回value2 |
| CASE WHEN 条件1 THEN result1 WHEN 条件2 THEN result2…[ELSE result] END | 相当于Java中的if…else if …else… |
| CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值2 THEN 值2 … [ELSE 值n ] END | 相当于Java中的switch … case … |
SELECT uname,IF(sex=1,1,0) FROM t_user
SELECT uname,IFNULL(sex,1) FROM t_user
SELECT uname,age,CASE WHEN IFNULL(age,0)<=12 THEN '儿童'
WHEN age<=18 THEN '少年'
WHEN age<=40 THEN '中年'
ELSE '老年' END "描述"
FROM t_user
五、其他函数
| 函数 | 用法 |
|---|
| database() | 返回当前数据库名 |
| version() | 返回当前数据库版本 |
| user() | 返回当前登录用户名 |
| password(str) | 返回字符串str的加密版本,41位长的字符串 |
| md5(str) | 返回字符串str的md5值,也是一种加密方式 |
学海无涯苦作舟
