mysql相关

data_sub:用于对某一日期进行加减某一时间间隔

DATE_SUB(date,INTERVAL expr type)
data: 时间字符串
expr: 时间间隔段,可以为负

type:
YEAR	年	YY
MONTH	月	MM
DAY	日	DD
HOUR	时	hh
MINUTE	分	mm
SECOND	秒	ss
YEAR_MONTH	年和月	YY和MM之间用任意符号隔开
DAY_HOUR	日和小时	DD和hh之间用任意符号隔开
DAY_MINUTE	日和分钟	DD和mm之间用任意符号隔开
DAY_SECOND	日和秒钟	DD和ss之间用任意符号隔开
HOUR_MINUTE	时和分	hh和mm之间用任意符号隔开
HOUR_SECOND	时和秒	hh和ss之间用任意符号隔开
MINUTE_SECOND	分和秒	mm和ss之间用任意符号隔开

具体使用:

DATE_SUB('2018-10-11',INTERVAL 1 month)   '2018-09-11'
DATE_SUB('2018-10-11',INTERVAL -1 month)  '2018-11-11'
DATE_SUB('2018-10-11',INTERVAL '-1 -1' YEAR_MONTH) '2019-11-11'

type只能使用已有的一项,不能混合使用 双日期时后一项负号无用

concat:用于字符串连接,可以多项

// 只要其中一个是NULL,那么将返回NULL
CONCAT(string1,string2,…) 

// 第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。
// 分隔符可以是一个字符串,也可以是其它参数。
// 如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值
// 后续的null只影响当前的一个拼接
CONCAT_WS(separator,str1,str2,...)

insert into select from:插入时需要联结其它表和本地数据:

 INSERT INTO TABLE1 (COLUMN1, COLUMN2) 
 SELECT now(),id FROM TABLE2 WHERE id=1
 // 或者
 INSERT INTO TABLE1 (COLUMN1, COLUMN2) 
 VALUES (value1,  
 (SELECT COLUMN_TABLE2  FROM TABLE2 WHERE COLUMN_TABLE2 like "blabla"));

插入主键重复转更新:

 INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

取日期函数:

year(date) 返回年份
month(date) 返回月份
week(date) 返回第几周数
day(date) 返回每月号数

在group by按日期分组时比较好用,如按周分组,group by concat(year(date),week(date)) 按拼接后的年和周数保证唯一性进行分组即可