【问题标题】:SQL - How to tell if a date is the last day of the month?SQL - 如何判断日期是否是本月的最后一天?
【发布时间】:2015-11-15 23:36:31
【问题描述】:

我找到了一些帖子(例如 SQL Query to find the last day of the monthGet the last day of the month in SQL)来获取该月的最后一天,但是有没有办法确定日期是否 一个月的最后一天?

例如,如果我有这些日期的列表-

8/29/2015   --fail

8/30/2015   --fail

8/31/2015   --pass

9/1/2015    --fail

如何编写查询以确定哪些日期通过/失败?我不能简单地测试 DAY() = 31,因为月份的天数并不都相同。

【问题讨论】:

  • 如果你 dateadd() 日期是你测试的日期,你可以检查结果天是否等于 1。
  • @gordy 这些是我一直在寻找的确切问题......它们是关于获取本月的最后一天(即使用 EOMONTH() 函数),但我想要实现的是测试给定日期是否是该月的最后一天。
  • @iliketocode 从“获取本月的最后一天”到“测试给定日期是否是本月的最后一天”是微不足道的,不是吗?提交问题的答案中包含了各种方式的示例。这里接受的答案也出现在 paq 中。所以投票结束?无论如何,这里的投票正在下雨..
  • SELECT (date_trunc('MONTH', Current_Date) + INTERVAL '1 MONTH - 1 day')::DATE;

标签: sql sql-server tsql datetime


【解决方案1】:

我想到了两种简单的方法。首先是:

select
testDate
, case 
   when month(testDate) <> month(dateadd(d,1,testDate))
      then 'pass'
   else 'fail'
  end endOfMonth
from tblTest

这会测试 testDate 后 1 天是否落在 testDate 当前所在月份以外的月份。如果是这样,testDate 必须是其当前月份的最后一天。

第二个是:

select
testDate
, case 
   when day(dateadd(d,1,testDate)) = 1
      then 'pass'
   else 'fail'
  end endOfMonth
from tblTest

这是一个类似的测试,但方式不同。如果 testDate 后 1 天是一个月的第一天,那么 testDate 必须是该月的最后天。

【讨论】:

    【解决方案2】:

    试试这个

    SELECT 
      CASE
        WHEN [DateColumn] = (CAST(DATEADD(MONTH, DATEDIFF(MONTH,0,[DateColumn])+1,0)-1 AS DATE)) 
          THEN 1
        ELSE 0
     END AS EOM
    FROM CardInfo
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 SQL Server 2012 或更高版本,请使用EOMONTH

      SELECT  my_date,
              IsEndOfMonth = IIF(my_date = EOMONTH(my_date), 1, 0) 
      FROM    my_table
      

      【讨论】:

      • 很聪明..没想到那个
      猜你喜欢
      • 1970-01-01
      • 2017-01-31
      • 2013-09-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多