【问题标题】:Get last day of previous month in yyyy-mm-dd format以 yyyy-mm-dd 格式获取上个月的最后一天
【发布时间】:2019-08-27 12:22:06
【问题描述】:

如何以yyyy-mm-dd 格式获取上个月的最后一天?

这是我尝试过的,但我不想显示秒数。仅 YYYY-MM-DD:

SELECT DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, GETDATE()), 0))

【问题讨论】:

  • 日期格式仅在您将其显示为 varchar 数据类型时才可行(日期/日期时间是字节并且没有格式)。只需将您的所有表达式都包含在 CONVERT(VARCHAR(10), <expression>, 120)
  • 可能使用 EOMONTH 是另一种选择 - SELECT CONVERT(varchar(10), EOMONTH(GETDATE(), -1), 23)

标签: sql sql-server tsql datetime sql-date-functions


【解决方案1】:

EOMONTH 函数与FORMAT 一起使用:

SELECT FORMAT(EOMONTH(CURRENT_TIMESTAMP, -1), 'yyyy-MM-dd')

上例中的-1 表示从参数1 中减去1 个月(不需要DATEADD)。

【讨论】:

    【解决方案2】:

    将其转换为仅日期格式

    SELECT convert(date,DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)),103)
    

    【讨论】:

      【解决方案3】:

      这应该可以工作

       SELECT CONVERT(VARCHAR(10),  DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)), 120)  
      

      【讨论】:

        【解决方案4】:

        试试这个流行的:

         SELECT CONVERT(VARCHAR(10),DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)),120)  
        

        Live demo

        【讨论】:

          【解决方案5】:

          试试这个:

          Select CONVERT(varchar, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)),23)
          

          【讨论】:

            【解决方案6】:

            我会使用它,因为新版本的 SQL 支持它:

            SELECT  CONVERT(DATE,EOMONTH(DATEADD(MM,-1,GETDATE())),103)
            

            完成相同任务的代码更短...

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-04-26
              • 2018-10-14
              • 2019-03-11
              • 1970-01-01
              • 1970-01-01
              • 2011-09-09
              • 2016-01-02
              相关资源
              最近更新 更多