PostgreSQL
PostgreSQL
SELECT date_trunc('month', now()); -- 本月 1 日 00:00
SELECT date_trunc('week', now()); -- 本周一(ISO)00:00
SELECT date_trunc('day', created_at) AS d, COUNT(*)
FROM orders GROUP BY 1 ORDER BY 1;MySQL 等价写法
MySQL 等价写法
-- 截断到月:先减掉(日-1)天
SELECT DATE_SUB(DATE(created_at), INTERVAL DAYOFMONTH(created_at)-1 DAY) AS m,
COUNT(*)
FROM orders GROUP BY m;
-- 或格式化再解析
SELECT STR_TO_DATE(DATE_FORMAT(created_at, '%Y-%m-01'), '%Y-%m-%d') AS m FROM orders;| PostgreSQL | date_trunc(text, timestamp);支持 microsecond~millennium |
|---|---|
| MySQL | 无同名函数;DATE(dt) 截到天,月/周按日期运算组合 |
| 对 timestamptz | PG 按会话时区截断,跨时区报表要显式 AT TIME ZONE |