字符串函数
-- CONCAT(S1,S2,…Sn)函数:把传入的参数连接成为一个字符串。任何字符串与NULL进行连接的结果都将是NULL。 select concat('aaa', 'bbb', 'ccc') ,concat('aaa',null); -- aaabbbccc,null -- INSERT(str,x,y,instr)函数:将字符串str从第x位置开始,y个字符长的子串替换为字符串instr。 select INSERT('beijing2008you',12,3, 'me');-- beijing2008me -- LOWER(str)和UPPER(str)函数:把字符串转换成小写或大写。 select LOWER('BEIJING2008'), UPPER('beijing2008');-- beijing2008,BEIJING2008 -- LEFT(str,x)和RIGHT(str,x)函数:分别返回字符串最左边的x个字符和最右边的x个字符。如果第二个参数是NULL,那么将不返回任何字符串。 SELECT LEFT('beijing2008',7),LEFT('beijing',null),RIGHT('beijing2008',4);-- beijing,null,2008 -- LPAD(str,n,pad)和RPAD(str,n,pad)函数:用字符串pad对str最左边和最右边进行填充,直到长度为n个字符长度。 select lpad('2008',20,'beijing'),rpad('beijing',20,'2008');-- beijingbeijingbe2008,beijing2008200820082 -- LTRIM(str)和RTRIM(str)函数:去掉字符串str左侧和右侧空格。 select ltrim(' beijing'),rtrim('beijing ');-- beijing,beijing -- REPEAT(str,x)函数:返回str重复x次的结果。 select repeat('mysql ',3);-- mysql mysql mysql -- REPLACE(str,a,b)函数:用字符串b替换字符串str中所有出现的字符串a。 select replace('beijing_2010','_2010','2008');-- beijing2008 -- STRCMP(s1,s2)函数:比较字符串s1和s2的ASCII码值的大小。 select strcmp('a','b'),strcmp('b','b'),strcmp('c','b');-- -1,0,1 -- TRIM(str)函数:去掉目标字符串的开头和结尾的空格。 select trim(' $ beijing2008 $ ');-- $ beijing2008 $ -- SUBSTRING(str,x,y)函数:返回从字符串str中的第x位置起y个字符长度的字串。 select substring('beijing2008',8,4),substring('beijing2008',1,7);-- 2008,beijing
数值函数
-- ABS(x)函数:返回x的绝对值。 select ABS(-0.8) ,ABS(0.8); -- 0.8,0.8 -- CEIL(x)函数:返回大于x的最小整数。 select CEIL(-0.8),CEIL(0.8);-- 0,1 -- FLOOR(x)函数:返回小于x的最大整数,和CEIL的用法刚好相反。 select FLOOR(-0.8), FLOOR(0.8);-- -1,0 -- MOD(x,y)函数:返回x/y的模。 select MOD(15,10),MOD(1,11),MOD(NULL,10);-- 5,1,null -- RAND()函数:返回0~1内的随机值。 select RAND(),RAND();-- 0.9192258947707954,0.7775240370794423 -- 利用此函数可以取任意指定范围内的随机数,比如需要产生 0~100 内的任意随机整数 select ceil(100*rand()),ceil(100*rand());-- 20,3 -- ROUND(x,y)函数:返回参数x的四舍五入的有y位小数的值。 select ROUND(11.11),ROUND(11.11,2),ROUND(11,2);-- 11,11.11,11 -- TRUNCATE(x,y)函数:返回数字x截断为y位小数的结果。 select ROUND(1.235,2),TRUNCATE(1.235,2);-- 1.24,1.23
日期和时间函数
-- CURDATE()函数:返回当前日期,只包含年月日。 select CURDATE(); -- 2021-01-06 -- CURTIME()函数:返回当前时间,只包含时分秒。 select CURTIME(); -- 10:57:35 -- NOW()函数:返回当前的日期和时间,年月日时分秒全都包含。 select NOW(); -- 2021-01-06 10:58:14 -- UNIX_TIMESTAMP(date)函数:返回日期date的UNIX时间戳。 select UNIX_TIMESTAMP(now()); -- 1609901920 -- FROM_UNIXTIME(unixtime)函数:返回 UNIXTIME 时间戳的日期值,和UNIX_TIMESTAMP(date)互为逆操作。 select FROM_UNIXTIME(1609901920);-- 2021-01-06 10:58:40 -- WEEK(DATE)和 YEAR(DATE)函数:前者返回所给的日期是一年中的第几周,后者返回所给的日期是哪一年。 select WEEK(now()),YEAR(now());-- 1,2021 -- HOUR(time)和MINUTE(time)函数:前者返回所给时间的小时,后者返回所给时间的分钟。 select HOUR(CURTIME()),MINUTE(CURTIME());-- 11,0 -- MONTHNAME(date)函数:返回date的英文月份名称。 select MONTHNAME(now());-- January -- DATE_FORMAT(date,fmt)函数:按字符串 fmt 格式化日期 date 值,此函数能够按指定的格式显示日期,可以用到的格式符如表所示。 select DATE_FORMAT(now(),'%M,%D,%Y');-- January,6th,2021 select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s');-- 2021-01-06 11:05:14 -- DATE_ADD(date,INTERVAL expr type)函数:返回与所给日期date相差 INTERVAL时间段的日期。 -- 其中INTERVAL是间隔类型关键字,expr是一个表达式,这个表达式对应后面的类型, type是间隔类型,MySQL提供了13种间隔类型,如表所示。 select now() current,date_add(now(),INTERVAL 31 day) after31days,date_add(now(),INTERVAL '1_2' year_month) after_oneyear_twomonth;-- 2021-01-06 11:06:17,2021-02-06 11:06:17,2022-03-06 11:06:17 select now() current,date_add(now(),INTERVAL -31 day) after31days, date_add(now(),INTERVAL '-1_-2' year_month) after_oneyear_twomonth;-- 2021-01-06 11:07:57,2020-12-06 11:07:57,2019-11-06 11:07:57 -- DATEDIFF(date1,date2)函数:用来计算两个日期之间相差的天数。 select DATEDIFF('2021-01-10',now());-- 4
流程函数
-- IF(value,t,f)函数 select if(salary>2000, 'high', 'low') from salary; -- IFNULL(value1,value2)函数:这个函数一般用来替换 NULL 值,我们知道 NULL 值是不能参与数值运算的,下面这个语句就是把NULL值用0来替换。 select ifnull(salary,0) from salary; -- CASE WHEN [value1] THEN[result1]…ELSE[default]END函数 select case when salary<=2000 then 'low' else 'high' end from salary;
其他常用函数
-- DATABASE()函数:返回当前数据库名。 select DATABASE();-- demo -- VERSION()函数:返回当前数据库版本。 select VERSION();-- 5.7.24-log -- USER()函数:返回当前登录用户名。 select USER();-- root@localhost -- INET_ATON(IP)函数:返回IP地址的网络字节序表示。 select INET_ATON('192.168.1.1');-- 3232235777 -- INET_NTOA(num)函数:返回网络字节序代表的IP地址。 select INET_NTOA(3232235777); -- 192.168.1.1 -- select * from t where inet_aton(ip)>=inet_aton('192.168.1.3') and inet_aton(ip)<=inet_aton('192.168.1.20'); -- PASSWORD(str)函数:返回字符串str的加密版本,一个41位长的字符串。 select PASSWORD('123456');-- *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 -- MD5(str)函数:返回字符串str的MD5值,常用来对应用中的数据进行加密。 select MD5('123456');-- e10adc3949ba59abbe56e057f20f883e