You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从tbl表的start_date列获取每月的第一天?

获取tbl表start_date列每个月第一天的SQL实现

嘿,这个需求在日常开发里挺常见的,不同数据库有不同的简洁写法,我给你整理几个主流数据库的实现方式:

MySQL/MariaDB

有两种常用写法,选哪个都可以:

  • 直接格式化日期到当月第一天:
SELECT DATE_FORMAT(start_date, '%Y-%m-01') AS first_day_of_month
FROM tbl;
  • 通过日期减法计算:
SELECT DATE_SUB(start_date, INTERVAL DAYOFMONTH(start_date) - 1 DAY) AS first_day_of_month
FROM tbl;

如果需要去重(比如同一个月有多条记录,只保留一条第一天),加上DISTINCT就行:

SELECT DISTINCT DATE_FORMAT(start_date, '%Y-%m-01') AS first_day_of_month
FROM tbl;

PostgreSQL

用DATE_TRUNC函数最简洁,它会把日期截断到指定的时间单位,这里指定month后转成日期类型就是当月第一天:

SELECT DATE_TRUNC('month', start_date)::DATE AS first_day_of_month
FROM tbl;

同样,去重的话加DISTINCT:

SELECT DISTINCT DATE_TRUNC('month', start_date)::DATE AS first_day_of_month
FROM tbl;

SQL Server

推荐用DATEFROMPARTS直接构造日期,可读性拉满:

SELECT DATEFROMPARTS(YEAR(start_date), MONTH(start_date), 1) AS first_day_of_month
FROM tbl;

另外还有一种经典的写法,通过计算月份差来得到当月第一天:

SELECT DATEADD(month, DATEDIFF(month, 0, start_date), 0) AS first_day_of_month
FROM tbl;

Oracle

用TRUNC函数指定MM参数,直接截断到当月第一天:

SELECT TRUNC(start_date, 'MM') AS first_day_of_month
FROM tbl;

根据你实际使用的数据库选对应的语句就好啦~

内容的提问来源于stack exchange,提问作者Kirill D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:57:49