SQL:你如何获取本月的第一天?

问题描述 投票:-1回答:3

SQL:你如何获取本月的第一天?

嗨,

我需要从start_date列的tbl.date获取每个月的第一天。

11/1/2017
12/1/2017
1/1/2018
2/1/2018
ETC.

谢谢

sql sql-server date toad
3个回答
0
投票

ANSI SQL中的一个解决方案如下所示:

select dte - (1 - extract(day from dte)) * interval '1 day'

在SQL Server中,这将是:

select dateadd(day, 1 - day(dte), dte)

几乎所有数据库都提供类似的功能。

如果您只想要一个月中第一天的行,那么:

where extract(day from dte) = 1

在SQL Server中,这将是:

where day(dte) = 1

当然,根据数据库的不同,语法可能会有所不同。


0
投票

使用Postgres的另一个解决方案,如果您需要选择每个月的第一行,如果不能保证这将是该月的第一天:

CREATE TABLE dates (
     id    BIGSERIAL PRIMARY KEY,
     date  TIMESTAMP NOT NULL
);

INSERT INTO dates(date)
VALUES ('2017-05-05'::timestamp), ('2017-05-02'::timestamp), ('2017-05-30'::timestamp), ('2017-05-25'::timestamp), ('2017-05-15'::timestamp), ('2017-05-01'::timestamp), ('2017-06-10'::timestamp), ('2017-06-02');

SELECT DISTINCT ON(EXTRACT(MONTH FROM date), EXTRACT(YEAR FROM date)) date
FROM dates
ORDER BY EXTRACT(MONTH FROM date), EXTRACT(YEAR FROM date), date ASC;

结果:

date
--------------------
2017-05-01T00:00:00Z
2017-06-02T00:00:00Z

0
投票

另一种解决方案,使用Sql server

声明@FirstDOM日期,@ LastDOM日期时间

set @FirstDOM = (select dateadd(d,-1,dateadd(mm,datediff(m,0,getdate()),1 )))

SELECT CONVERT( varchar, @FirstDOM,101); 
© www.soinside.com 2019 - 2024. All rights reserved.