一、字符串函数
函数 |
描述 |
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);
-- 1. 使用concat函数显示出 你好,uname 的结果
SELECT CONCAT("你好,",uname) FROM t_user
-- 2. 使用concat_ws函数显示出 你好,uname ,很高兴认识你的结果
SELECT CONCAT_WS(",","你好",uname,"很高兴认识你") FROM t_user
-- 3. 将字符串hello 转换为大写显示
SELECT UPPER("hello")
-- 4. 查询所有用户名,将用户名显示为大写
SELECT UPPER(uname) FROM t_user
-- 5. 查询所有用户名,去掉左右两端的空格
SELECT TRIM(uname) FROM t_user
-- 6. 获取 hello,world 从第二个字符开始的完整子串
SELECT SUBSTRING("hello,world",2)
-- 7. 获取hello,world 从第二个字符开始但是长度为4的子串
SELECT SUBSTRING("hello,world",2,4)
二、数值函数
函数 |
用法 |
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次方 |
-- 数值函数
-- 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
-- 获取1~100的随机整数
SELECT CEIL(RAND()*100)
三、日期函数
函数 |
用法 |
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 |
%% |
表示% |
-- 日期函数
-- 1. 将当前时间转成字符串
SELECT DATE_FORMAT(LOCALTIME(),"%Y-%m-%d %H:%i:%S")
-- 2. 获取当前日期
SELECT CURDATE()
-- 3. 获取当前时间
SELECT CURTIME()
-- 4. 获取当前的日期时间
SELECT NOW()
-- 5. 获取到元旦还有多少天
SELECT DATEDIFF("2023-01-01",NOW())
-- 6. 一年后的现在的日期时间
SELECT DATE_ADD(NOW(),INTERVAL 1 YEAR)
四、流程函数
函数 |
用法 |
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 ... |
-- 流程函数
-- 1. 获取用户的姓名、性别,如果性别为1则显示1,否则显示0;要求使用if函数查询
SELECT uname,IF(sex=1,1,0) FROM t_user
-- 2. 获取用户的姓名、性别,如果性别为null则显示为1:要求使用ifnull函数查询
SELECT uname,IFNULL(sex,1) FROM t_user
-- 3. 查询用户的年龄,如果年龄<=12岁就是儿童,<=18岁就是少年,<=40岁就是中年,其他就是老年
-- 使用case when进行查询到的内容是单独作为一个字段存在的,所以跟其他字段要用逗号,分割
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值,也是一种加密方式 |
学海无涯苦作舟