正文
mysql常用单行函数
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
一、大小写控制函数
LOWER(str) 将str的值全部置为小写字母
-
select LOWER('ABC');
-
-
--结果:
-
-
LOWER('ABC')
-
abc
UPPER(str) 将str的值全部置为大写字母
-
select UPPER('abc');
-
-
--结果:
-
-
UPPER('abc')
-
ABC
二、字符控制函数
CONCAT(str1,str2,...) 将str1、str2等字符串连接起来
-
select CONCAT('a','b','c');
-
-
--结果:
-
-
CONCAT('a','b','c')
-
abc
SUBSTR(str,pos,len) 从str的第pos位(范围:1~str.length)开始,截取长度为len的字符串
-
select SUBSTR('abc',1,2);
-
-
--结果:
-
-
SUBSTR('abc',1,2)
-
ab
LENGTH(str) 获取str的长度
-
select LENGTH('abc');
-
-
--结果:
-
-
LENGTH('abc')
-
3
INSTR(str,substr) 获取substr在str中的位置
-
select INSTR('abc','a');
-
-
--结果:
-
-
INSTR('abc','a')
-
1
LPAD(str,len,padstr)/RPAD(str,len,padstr) 首先判断str是否达到了len的长度,如果没有达到,那么在str的左侧/右侧对应添加padstr来使结果达到len的长度
注:padstr常用的值有:'*'和' '(空格)
-
select name from person;
-
-
--结果:
-
-
name
-
xiaoP
-
xiaoPP
-
xiao_p
-
-
--
-
-
select LPAD(name,10,'*')from person;
-
-
--结果:
-
-
LPAD(name,10,'*')
-
*****xiaoP
-
****xiaoPP
-
****xiao_p
TRIM(remstr FROM str) 从str中删除开头和结尾的remstr(不会处理字符串中间含有的remstr)
TRIM(str) 从str中删除开头和结尾的空格(不会处理字符串中间含有的空格)
LTRIM(str) 从str中删除左侧开头的空格
RTRIM(str) 从str中删除右侧结尾的空格
-
select TRIM('a' FROM 'abca');
-
-
--结果:
-
-
TRIM('a' FROM 'abca')
-
bc
-
-
--
-
select TRIM('a' FROM 'abab');
-
-
--结果:
-
-
TRIM('a' FROM 'abab')
-
bab
-
-
--
-
-
select LTRIM(' abc ');
-
-
--结果:
-
-
LTRIM(' abc ')
-
abc --abc后面是有空格的
-
-
--
-
select RTRIM(' abc ');
-
-
--结果:
-
-
RTRIM(' abc ')
-
abc
REPLACE(str,from_str,to_str) 将str中的from_str替换为to_str(会替换掉所有符合from_str的字符串)
-
SELECT REPLACE('abcbc','b','m');
-
-
--结果:
-
-
REPLACE('abcbc','b','m')
-
amcmc
三、数字函数
ROUND(X,D) 根据D指定的(小数)位数对X进行四舍五入(注意,D可以为负数,为负数的时候即为对个位以上四舍五入)
ROUND(X) 对X进行取整,根据十分位进行四舍五入,精确到个位
-
SELECT ROUND(2.3456,3);
-
-
--结果:
-
-
ROUND(2.3456,3)
-
2.346
TRUNCATE(X,D) 根据D指定的(小数)位数来对X进行截断(不进行四舍五入)(注意,D可以为负数,为负数的时候即为对个位以上截断)
-
SELECT TRUNCATE(10.88888,2);
-
-
--结果:
-
-
TRUNCATE(10.88888,2)
-
10.88
MOD(N,M) 对N/M求余
-
select MOD(5.7,2.8);
-
-
--结果:
-
-
MOD(5.7,2.8)
-
0.1
四、日期函数
SYSDATE()或者NOW() 返回当前系统时间,格式为YYYY-MM-DD hh-mm-ss
-
select SYSDATE();
-
-
--结果:
-
-
SYSDATE()
-
2015-06-2021:17:25
DAYOFMONTH(date) 返回指定时间的月份
DAYOFWEEK(date) 返回指定时间是星期几(注意,这个和中国的习惯有不符,此返回值如果是1,则代表星期日)
DAYOFYEAR(date) 返回指定时间是哪一年
以上函数中,date可以用NOW()或者其他的date格式的字段
日期可以和数字(作为天数)做加减;日期和日期之间只可以做减法;数字除以24可以作为天数和日期相加减;
注:经实测,日期只要是和数字进行了交互,格式就会发生变化(由YYYY-MM-DD hh-mm-ss变为YYYYMMDDhhmmss),然后再进行运算
DAYNAME(date) 返回date日期是星期几
LAST_DAY(date) 返回date日期当月的最后一天
五、转换函数
TO_DAYS(date) 将date格式的日期转换为天数('0000-01-01'转换结果为1,以此类推)
TO_SECONDS(expr) 将表达式expr转换成秒('0000-01-01'转换结果为86400,为一天的秒数)
DATE_FORMAT(date,format) 将日期转换成字符串(类似oracle中的to_char())
STR_TO_DATE(str,format) 将字符串转换成日期(类似oracle中的to_date())
-
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %T'),STR_TO_DATE(NOW(),'%Y-%m-%d %T');
-
-
--结果:
-
-
DATE_FORMAT(NOW(),'%Y-%m-%d %T') STR_TO_DATE(NOW(),'%Y-%m-%d %T')
-
2015-06-2113:52:06 2015-06-2113:52:06
UNIX_TIMESTAMP([datetime]) 将datetime格式的日期时间转换为unix时间戳(如果参数为空,则转换当前系统时间)
六、通用函数
IFNULL(expr1,expr2) 判断expr1是否为null,如果为null,则用expr2来代替null(类似oracle的NVL()函数)
-
SELECT
-
id,
-
NAME,
-
dept_id,
-
FORMAT(
-
salary *12*(IFNULL(commission_pct,1)),
-
0
-
)
-
FROM
-
person
-
WHERE
-
dept_id IN (101,106,109);
-
-
--结果:
-
-
id name dept_id FORMAT (salary*12*(IFNULL(commission_pct,1)),0)
-
0001 LiLei 101 13,200
-
0002 HanMeimei 106 27,600
-
0003 Lucy 109 36,000
IF(expr1,expr2,expr3) 判断expr1是否为真(是否不为null),如果为真,则使用expr2替代expr1;如果为假,则使用expr3替代expr1(类似oracle的NVL2()函数)
-
SELECT
-
-
IF (
-
dept_id,
-
'有部门','没有部门'
-
) dept
-
FROM
-
person;
-
-
--结果:
-
-
dept
-
有部门
-
有部门
-
有部门
-
没有部门
NULLIF(expr1,expr2) 判断expr1和expr2是否相等,如果相等则返回null,如果不相等则返回expr1
-
select NULLIF(1,1),NULLIF(1,2);
-
-
--结果:
-
-
NULLIF(1,1) NULLIF(1,2)
-
(NULL) 1
COALESCE(value,...) 判断value的值是否为null,如果不为null,则返回value;如果为null,则判断下一个value是否为null……直至出现不为null的value并返回或者返回最后一个为null的value。
-
SELECT
-
COALESCE (
-
dept_id,
-
commission_pct,
-
NAME
-
)
-
FROM
-
person
-
WHERE
-
NAME ='Lily';
-
-
--结果:
-
-
COALESCE (dept_id,commission_pct,name)
-
Lily
CASE WHEN THEN ELSE END 条件函数
CASE 指定字段 WHEN 需要符合的条件1 THEN 表达式1 WHEN 需要符合的条件2 THEN 表达式2 ... ELSE 其他情况的表达式 END
-
SELECT
-
id,
-
NAME,
-
dept_id,
-
CASE dept_id
-
WHEN 101 THEN
-
salary *1.1
-
WHEN 106 THEN
-
salary *1.2
-
ELSE
-
salary *1.3
-
END salary
-
FROM
-
person
-
WHERE
-
dept_id IN (101,106,109);
-
-
--结果:
-
-
id NAME dept_id salary
-
0001 LiLei 101 1100
-
0002 HanMeimei 106 2400
-
0003 Lucy 109 3900