具体案例:
上月数据:
DATE_SUB()推算出上月具体的日期,然后使用YEAR()或MONTH()函数匹配年份和月份。
-----方法一:
year = YEAR(DATE_SUB('2023-03-19 08:00:00', INTERVAL 1 MONTH))
AND month = MONTH(DATE_SUB('2023-03-19 08:00:00', INTERVAL 1 MONTH))
YEAR()或MONTH()函数
-----方法二
year = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND month = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
EXTRACT()函数,分别提取上月年份和月份,然后进行匹配。
------方法三:
--当前时间
year = EXTRACT(YEAR FROM (CURRENT_DATE - INTERVAL '1 MONTH'))
AND month = EXTRACT(MONTH FROM (CURRENT_DATE - INTERVAL '1 MONTH'))
--给定时间
year = EXTRACT(YEAR FROM (‘2023-01-01’ - INTERVAL '1 MONTH'))
AND month = EXTRACT(MONTH FROM (‘2023-01-01’ - INTERVAL '1 MONTH'))
上周数据:
DATE_SUB()推算上周的临界值(即周一和周日)
-----通用
date BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL (WEEKDAY(CURRENT_DATE) + 7) DAY) AND DATE_SUB(CURRENT_DATE, INTERVAL (WEEKDAY(CURRENT_DATE) + 1) DAY)
----格式转化
date >= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL WEEKDAY(CURRENT_DATE) + 7 DAY), '%Y%m00')
AND date <= DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL WEEKDAY(CURRENT_DATE) + 1 DAY), '%Y%m00')
YEARWEEK(date,mode)函数
YEARWEEK(date,1) = YEARWEEK('2023-11-23' - INTERVAL 1 WEEK ,1);
--YEARWEEK()函数返回结果:202323(年份+第几周)
注意:
1. mode参数取值如下:
- 0 - 星期的第一天是星期日(默认值)
- 1 - 一周的第一天是星期一,第一周是超过3天
- 2 - 星期的第一天是星期天
- 3 - 一周的第一天是星期一,第一周是超过3天
2. 不需要考虑跨年问题
例如:2023年第一周:1.1
2023年第二周:1.2 - 1.8
则:YEARWEEK('2023-01-01') = 202252
解释:2023年第一周少于3天,所以视为2022年最后一周。不会出现2022-12-31和2023-01-01为同一周,进行周计算结果不同的问题。
3. 求上周不可以使用WEEK()函数
因为使用WEEK()函数,需要同时匹配年和周,可能存在跨年问题(上周周一和周日不在一年)。
本周数据:
DATE(time) BETWEEN DATE_SUB('2023-04-27', INTERVAL (WEEKDAY('2023-04-27')) DAY) AND DATE_ADD('2023-04-27', INTERVAL (6-WEEKDAY('2023-04-27')) DAY)
获取年份:
YEAR(emp_hire_date) = 2022
--如果你的数据库系统不支持YEAR()函数,可能需要使用其他函数或方法
EXTRACT(YEAR FROM emp_hire_date) = 2022
--或者在SQLite中
strftime('%Y', emp_hire_date) = '2022'
OTHER函数:
1. STR_TO_DATE() //将字符串转化为日期
例如:
STR_TO_DATE(login_time, '%Y.%m.%d') <= '2019-08-10'
当前时间:
CURRENT_DATE ‘2023-11-22’
CURRENT_DATE() ‘2023-11-22’
CURDATE() ‘2023-11-22’
NOW() ‘2023-07-19 14:30:45’(YYYY-MM-DD HH:MM:SS)
CURRENT_TIMESTAMP ‘2023-07-19 14:30:45’(YYYY-MM-DD HH:MM:SS)
SYSDATE() ‘2023-07-19 14:30:45’(YYYY-MM-DD HH:MM:SS)
MYSQL数据类型:
数据类型 零值
DATE 0000-00-00
TIME 00:00:00
DATETIME 0000-00-00 00:00:00
TIMESTAMP 0000-00-00 00:00:00
YEAR 0000