MySQL查询本周本月本年任意天数天内的数据的sql语句
在我们日常开发中,在很多情况下都会使用到很多与时间相关的sql,包括但不限于本日本周本月本年近周近月近年等常见的sql,对于这些常见的计算逻辑,本文进行了及其详细的整理与归纳,有需要的小伙伴可以自行获取与学习~...
·
前言
在我们日常开发中,在很多情况下都会使用到很多与时间相关的sql,包括但不限于本日本周本月本年近周近月近年等常见的sql,对于这些常见的计算逻辑,本文进行了及其详细的整理与归纳,有需要的小伙伴可以自行获取与学习~
ㅤㅤㅤㅤ ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ
1.获取本日本周本月本年
- 昨日
SELECT * FROM 表名 WHERE
DAYOFYEAR( date_format( 时间字段, '%Y-%m-%d' ) ) = DAYOFYEAR( ( SELECT max( 时间字段 ) FROM 表名 ) ) - 1
- 本周(从周日开始计算)
SELECT * FROM 表名 WHERE
YEARWEEK( date_format( 时间字段名, '%Y-%m-%d' ) ) = YEARWEEK( (SELECT max( 时间字段名 ) FROM 表名) )
###########
SELECT * FROM 表名 WHERE
YEARWEEK(date_format( 时间字段名 ,'%Y-%m-%d')) = YEARWEEK(now())
- 本周(从周一开始计算)
SELECT * FROM 表名 WHERE YEARWEEK(date_format(时间字段,'%Y-%m-%d'),1) = YEARWEEK(now(),7);
SELECT * FROM 表名 WHERE YEARWEEK(date_format(时间字段,'%Y-%m-%d'),1) = YEARWEEK((SELECT max( 时间字段名 ) FROM 表名),7);
- 上周
SELECT * FROM 表名 WHERE
YEARWEEK(date_format( 时间字段名, '%Y-%m-%d' ) ) = YEARWEEK( (SELECT max( 时间字段名 ) FROM 表名) )-1
- 本月
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名 , '%Y-%m' ) =DATE_FORMAT( CURDATE( ) , '%Y-%m' )
#########
SELECT * FROM 表名 WHERE DATE_FORMAT( wfsj, '%Y-%m' ) = DATE_FORMAT( ( SELECT max( 时间字段名 ) FROM 表名 ), '%Y-%m' )
- 上月
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y-%m' ) , date_format( 时间字段名, '%Y-%m' ) ) =1
- 本年
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y' ) = DATE_FORMAT( ( SELECT max( 时间字段名 ) FROM 表名 ), '%Y' )
- 本季度
select * from 表名 where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));
- 查询距离现在xx个月的数据
select * from 表名 where 时间字段名 between date_sub(now(),interval xx month) and now();
2.获取近周近月近年
- 近7天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <=date(时间字段名)
- 近30天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <=date(时间字段名)
- 近月
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <=date(时间字段名)
- 近12个月
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 12 MONTH) <=date(时间字段名)
- 近年
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 1 YEAR) <=date(时间字段名)
3.获取时间段
熟练使用UNION字段,对两个sql语句进行并集
- 0-4、4-8、8-12、12-16、16-20、20-24六个时间维度去查询
SELECT
'0-4时' AS '时间',
COUNT(*) AS '数量'
FROM 表名
WHERE
DATE_FORMAT( 时间字段, '%H' ) >= 0 AND DATE_FORMAT( 时间字段, '%H' ) < 4
UNION
SELECT
'4-8时' AS '时间',
COUNT(*) AS '数量'
FROM 表名
WHERE
DATE_FORMAT( 时间字段, '%H' ) >= 4 AND DATE_FORMAT( 时间字段, '%H' ) < 8
UNION
SELECT
'8-12时' AS '时间',
COUNT(*) AS '数量'
FROM 表名
WHERE
DATE_FORMAT( 时间字段, '%H' ) >= 8 AND DATE_FORMAT( 时间字段, '%H' ) < 12
UNION
SELECT
'12-16时' AS '时间',
COUNT(*) AS '数量'
FROM 表名
WHERE
DATE_FORMAT( 时间字段, '%H' ) >= 12 AND DATE_FORMAT( 时间字段, '%H' ) < 16
UNION
SELECT
'16-20时' AS '时间',
COUNT(*) AS '数量'
FROM 表名
WHERE
DATE_FORMAT( 时间字段, '%H' ) >= 16 AND DATE_FORMAT( 时间字段, '%H' ) < 20
UNION
SELECT
'20-24时' AS '时间',
COUNT(*) AS '数量'
FROM 表名
WHERE
DATE_FORMAT( 时间字段, '%H' ) >= 20 AND DATE_FORMAT( 时间字段, '%H' ) < 24
更多推荐
已为社区贡献1条内容
所有评论(0)