【问题标题】:SQL: how do you fetch a first day of the month?SQL:如何获取一个月的第一天?
【发布时间】:2018-03-03 23:09:23
【问题描述】:

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

嗨,

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

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

谢谢

【问题讨论】:

  • 是哪个数据库
  • 用您正在使用的数据库标记您的问题。
  • 日期(tbl.date)= 1

标签: sql sql-server date toad


【解决方案1】:

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

当然,语法可能因数据库而异。

【讨论】:

    【解决方案2】:

    另一种解决方案,使用 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
    

    【讨论】:

      【解决方案3】:

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

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

      set @FirstDOM = (select dateadd(d,-1,dateadd(mm,datediff(m,0,getdate()),1 )))
      
      SELECT CONVERT( varchar, @FirstDOM,101); 
      

      【讨论】:

        猜你喜欢
        • 2022-01-22
        • 2013-02-15
        • 2016-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-14
        • 1970-01-01
        相关资源
        最近更新 更多