一、大小写控制函数
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;--结果:namexiaoPxiaoPPxiao_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()函数)
SELECTid,NAME,dept_id,FORMAT(salary *12*(IFNULL(commission_pct,1)),0)FROMpersonWHEREdept_id IN (101,106,109);--结果:id name dept_id FORMAT (salary*12*(IFNULL(commission_pct,1)),0)0001 LiLei 101 13,2000002 HanMeimei 106 27,6000003 Lucy 109 36,000
IF(expr1,expr2,expr3) 判断expr1是否为真(是否不为null),如果为真,则使用expr2替代expr1;如果为假,则使用expr3替代expr1(类似oracle的NVL2()函数)
SELECTIF (dept_id,'有部门','没有部门') deptFROMperson;--结果: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。
SELECTCOALESCE (dept_id,commission_pct,NAME)FROMpersonWHERENAME ='Lily';--结果:COALESCE (dept_id,commission_pct,name)Lily
CASE WHEN THEN ELSE END 条件函数
CASE 指定字段 WHEN 需要符合的条件1 THEN 表达式1 WHEN 需要符合的条件2 THEN 表达式2 ... ELSE 其他情况的表达式 END
SELECTid,NAME,dept_id,CASE dept_idWHEN 101 THENsalary *1.1WHEN 106 THENsalary *1.2ELSEsalary *1.3END salaryFROMpersonWHEREdept_id IN (101,106,109);--结果:id NAME dept_id salary0001 LiLei 101 11000002 HanMeimei 106 24000003 Lucy 109 3900
来源:https://www.cnblogs.com/rainyeagle/p/4592930.html