DATE_SUB和SUBDATE
DATE_SUB(date,INTERVAL expr type) 和 SUBDATE(date,INTERVAL expr type) 两个函数作用相同,都是执行日期的减法运算。
DATE_SUB() 和 SUBDATE() 函数接受两个参数:
- date 是一个合法的日期或者表达式。
- expr 表示希望减去的时间间隔。
- type 表示减去时间间隔的单位,比如秒,分钟等。具体取值有YEAR, MONTH, WEEK, DAY,HOUR等等。
DATE_ADD和ADDDATE
DATE_ADD(date,INTERVAL expr type) 和 ADDDATE(date,INTERVAL expr type) 两个函数作用相同,都是执行日期的加法运算。其参数格式和DATE_SUB函数、SUBDATE函数是一样的。
DATE_FORMAT
DATE_FORMAT(date, format) 函数根据format字符串格式化date值。
可以使用的格式有:
格式 | 描述 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%f | 微秒 |
%H | 小时(00-23) |
%h | 小时(01-12) |
%I | 小时(01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天(001-366) |
%k | 小时(0-23) |
%l | 小时(1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 时间, 24-小时(hh:mm:ss) |
%U | 周(00-53)星期日是一周的第一天 |
%u | 周(00-53)星期一是一周的第一天 |
%V | 周(01-53)星期日是一周的第一天,与 %X 使用 |
%v | 周(01-53)星期一是一周的第一天,与 %x 使用 |
%W | 星期名 |
%w | 周的天(0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:
1 | select |
结果如下所示:
1 | Nov 04 2008 11:45 PM |
find_in_set()
find_in_set函数的语法:
1 | FIND_IN_SET(str,strlist) |
说明:
- str:要查询的字符串
- strlist:字段名或者常量,参数以”,”分隔。例如 ‘1,2,6,8,10,22’、’张三,李四’。
函数解释:查询字段(strlist)中包含(str)的结果,返回结果为null或符合条件的记录。
举个,比如商品表中有一个字段表示售卖的平台(sale_platform),其中1表示淘宝,2表示京东,3表示拼多多,4表示苏宁易购,字段存储的数据是“1,2”、“1,2,3”这种,那么如果我们想要查询在京东上出售的商品,就可以使用如下sql语句:
1 | select * from goods where find_in_set(2, sale_platform); |
此外,find_in_set也可以有类似于in的用法,比如:
1 | select * from goods where find_in_set(id, '1,2,3,4,5'); # 查询id等于1,2,3,4,5的记录 |
substr()
substr可以有3个参数,比如格式为substr(str,pos,len)
这种,3个参数分别是:str-字符串,pos-起始位置,len-截断长度。
substr(str,pos);
1
SELECT SUBSTR('2021-08-03',6); //输出:08-03
substr(str from pos);
1
SELECT SUBSTR('2021-08-03' FROM 6); //输出:08-03
substr(str,pos,len);
1
SELECT SUBSTR('2021-08-03',6,2); //输出:08
substr(str from pos len);
1
SELECT SUBSTR('2021-08-03' FROM 6 FOR 2); //输出:08
v1.5.2