【问题标题】:Data Preparation End OF Every Month - Moving Over 12 Months每月结束的数据准备 - 超过 12 个月
【发布时间】:2020-02-18 14:55:27
【问题描述】:

我在 SQL 中有数据准备程序。我想在每个月底进行数据准备 假设我希望该程序在每月的最后一天运行,例如2020 年 1 月 31 日,它应该准备从 1 月 1 日到 1 月 31 日的数据。

所以这是一年中所有月份的移动窗口。因为我需要每个月底的评估数据。

我试过这个,但是,这并没有提供自动化。它的那种手动运行每月结束

select '2020-10-01' as beginDate_AnalysisWindow  
, '2020 -01-31' as endDate_AnalysisWindow 
   into #AnalysisWindow --create temporary table #AnalysisWindow 

我也尝试了以下方法,但是我不确定是整月还是一天?

SELECT START_OF_MONTH_DATE AS beginDate_AnalysisWindow
,END_OF_MONTH_DATE AS endDate_AnalysisWindow
INTO #AnalysisWindow
FROM [dbo].[Date] WITH (NOLOCK)
WHERE DATE = DATEADD(dd, - 1,  CAST(GETDATE() AS DATE))

有人可以帮我/给我一些建议吗。

提前致谢

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 因为该查询是特定于产品的。
  • 你的最终结果是什么样的?

标签: sql sql-server date monthcalendar


【解决方案1】:

如果您想要当月的最后一天,请使用eomonth()

WHERE DATE = CONVERT(date, EOMONTH(GETDATE()))

注意:这假定date 列没有时间组件。如果是这样的话:

WHERE CONVERT(date, DATE) = CONVERT(date, EOMONTH(GETDATE()))

即使对于这种类型的转换,SQL Server 仍将使用索引(如果可用)。

编辑:

要获取当前月份的数据,一种方法是:

WHERE DATE <= CONVERT(date, EOMONTH(GETDATE())) AND
      DATE > CONVERT(date, EOMONTH(GETDATE(), -1)) 

EOMONTH() 的第二个参数是月份偏移量。

【讨论】:

  • 谢谢,非常感谢。意思是不是;那我会得到每月第一天和最后一天的数据吗?
  • @JamesTaylor 。 . .这只是最后一天:“因为我需要每个月底的评估数据。”
  • 对不起,我应该改写“我想在最后一天进行数据准备,但应该是几个月的所有日子(例如从 1 到 31:(1 月为 31 天))跨度>
【解决方案2】:

你也可以试试:

where getdate() <= EOMONTH(GETDATE()) AND
      getdate() > DATEADD(DAY, 1, EOMONTH(GETDATE(), -1))

您可以使用日期列来代替 getdate()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-11
    • 2019-12-03
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-13
    相关资源
    最近更新 更多