MySQL/PG/TDengine 时间范围 SQL 表达式

说明

  1. 每个时间范围区间都是左闭右开

|------|----------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 时间范围 | MySQL 表达式 | PostgreSQL 表达式 | TDengine 表达式 |
| 前天​ | CURDATE() - INTERVAL 2 DAY, CURDATE() - INTERVAL 1 DAY | CURRENT_DATE - INTERVAL '2 days', CURRENT_DATE - INTERVAL '1 day' | TODAY() - 2d, TODAY() - 1d |
| 昨天​ | CURDATE() - INTERVAL 1 DAY, CURDATE() | CURRENT_DATE - INTERVAL '1 day', CURRENT_DATE | TODAY() - 1d, TODAY() |
| 今天​ | CURDATE(), CURDATE() + INTERVAL 1 DAY | CURRENT_DATE, CURRENT_DATE + INTERVAL '1 day' | TODAY(), TODAY() + 1d |
| 上周​ | DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) + 7 DAY), DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) | DATE_TRUNC('week', CURRENT_DATE - INTERVAL '1 week'), DATE_TRUNC('week', CURRENT_DATE) | TIMETRUNCATE(NOW(), 1d) - (7 + WEEKDAY(TO_CHAR(NOW(), 'YYYY-MM-DD'))) * 24 * 3600000, TIMETRUNCATE(NOW(), 1d) - WEEKDAY(TO_CHAR(NOW(), 'YYYY-MM-DD')) * 24 * 3600000 |
| 本周​ | DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY), DATE_SUB(CURDATE(), INTERVAL WEEKDAY(CURDATE()) DAY) + INTERVAL 7 DAY | DATE_TRUNC('week', CURRENT_DATE), DATE_TRUNC('week', CURRENT_DATE + INTERVAL '1 week') | TIMETRUNCATE(NOW(), 1d) - WEEKDAY(TO_CHAR(NOW(), 'YYYY-MM-DD')) * 24 * 3600000, TIMETRUNCATE(NOW(), 1d) + (7 - WEEKDAY(TO_CHAR(NOW(), 'YYYY-MM-DD'))) * 24 * 3600000 |
| 上月​ | DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, '%Y-%m-01'), DATE_FORMAT(CURDATE(), '%Y-%m-01') | DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month'), DATE_TRUNC('month', CURRENT_DATE) | TO_TIMESTAMP(TO_CHAR(NOW() -1n, 'YYYY-MM'), 'YYYY-MM'), TO_TIMESTAMP(TO_CHAR(NOW(), 'YYYY-MM'), 'YYYY-MM') |
| 本月​ | DATE_FORMAT(CURDATE(), '%Y-%m-01'), DATE_FORMAT(CURDATE() + INTERVAL 1 MONTH, '%Y-%m-01') | DATE_TRUNC('month', CURRENT_DATE), DATE_TRUNC('month', CURRENT_DATE + INTERVAL '1 month') | TO_TIMESTAMP(TO_CHAR(NOW(), 'YYYY-MM'), 'YYYY-MM'), TO_TIMESTAMP(TO_CHAR(NOW() + 1n, 'YYYY-MM'), 'YYYY-MM') |
| 上季度​ | MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL (QUARTER(CURDATE()) - 2) * 3 MONTH, MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL (QUARTER(CURDATE()) - 1) * 3 MONTH | DATE_TRUNC('quarter', CURRENT_DATE - INTERVAL '3 months'), DATE_TRUNC('quarter', CURRENT_DATE) | TO_TIMESTAMP(CASE WHEN TO_CHAR(NOW(), 'MM') <= 3 THEN CONCAT(CAST(TO_CHAR(NOW(), 'YYYY') - 1 AS VARCHAR(5)), "-", CAST(FLOOR((TO_CHAR(NOW(), 'MM') + 8) / 3) * 3 + 1 AS VARCHAR(3))) ELSE CONCAT(TO_CHAR(NOW(), 'YYYY'), "-", CAST(FLOOR((TO_CHAR(NOW(), 'MM') - 4) / 3) * 3 + 1 AS VARCHAR(3))) END, 'YYYY-MM'), TO_TIMESTAMP(CONCAT(TO_CHAR(NOW(), 'YYYY'), "-", CAST(FLOOR((TO_CHAR(NOW(), 'MM') - 1) / 3) * 3 + 1 AS VARCHAR)), 'YYYY-MM') |
| 本季度​ | MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL (QUARTER(CURDATE()) - 1) * 3 MONTH, MAKEDATE(YEAR(CURDATE()), 1) + INTERVAL QUARTER(CURDATE()) * 3 MONTH | DATE_TRUNC('quarter', CURRENT_DATE), DATE_TRUNC('quarter', CURRENT_DATE + INTERVAL '3 months') | TO_TIMESTAMP(CONCAT(TO_CHAR(NOW(), 'YYYY'), "-", CAST(FLOOR((TO_CHAR(NOW(), 'MM') - 1) / 3) * 3 + 1 AS VARCHAR)), 'YYYY-MM'), TO_TIMESTAMP(CONCAT(CAST(TO_CHAR(NOW(), 'YYYY') + CASE WHEN TO_CHAR(NOW(), 'MM') >= 10 THEN 1 ELSE 0 END AS VARCHAR), "-", CAST((FLOOR((TO_CHAR(NOW(), 'MM') + 2) / 3) * 3 + 1) % 12 AS VARCHAR)), 'YYYY-MM') |
| 去年​ | MAKEDATE(YEAR(CURDATE()) - 1, 1), MAKEDATE(YEAR(CURDATE()), 1) | DATE_TRUNC('year', CURRENT_DATE - INTERVAL '1 year'), DATE_TRUNC('year', CURRENT_DATE) | TO_TIMESTAMP(TO_CHAR(NOW() - 1y, 'YYYY'), 'YYYY'), TO_TIMESTAMP(TO_CHAR(NOW(), 'YYYY'), 'YYYY') |
| 今年​ | MAKEDATE(YEAR(CURDATE()), 1), MAKEDATE(YEAR(CURDATE()) + 1, 1) | DATE_TRUNC('year', CURRENT_DATE), DATE_TRUNC('year', CURRENT_DATE + INTERVAL '1 year') | TO_TIMESTAMP(TO_CHAR(NOW(), 'YYYY'), 'YYYY'), TO_TIMESTAMP(TO_CHAR(NOW() + 1y, 'YYYY'), 'YYYY') |

相关推荐
过期动态19 小时前
JDBC高级篇:优化、封装与事务全流程指南
android·java·开发语言·数据库·python·mysql
Mr.朱鹏19 小时前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
一位代码19 小时前
mysql | 常见日期函数使用及格式转换方法
数据库·mysql
杰克尼19 小时前
mysql_day01
数据库·mysql
ccino .20 小时前
sql注入中过滤分隔符的测试方法
数据库·sql
Hello.Reader21 小时前
Flink SQL CREATE 语句从建表到 CTAS/RTAS,一次讲清
sql·flink·linq
计算机学姐1 天前
基于php的摄影网站系统
开发语言·vue.js·后端·mysql·php·phpstorm
计算机学姐1 天前
基于php的旅游景点预约门票管理系统
开发语言·后端·mysql·php·phpstorm
czlczl200209251 天前
高并发下的 Token 存储策略: Redis 与 MySQL 的一致性
数据库·redis·mysql