【问题标题】:SQL dates returns 12/20/18 when it should be 12/20/17SQL 日期应为 12/20/17 时返回 12/20/18
【发布时间】:2018-05-25 19:21:08
【问题描述】:

任何帮助将不胜感激。它适用于 2/10/18、3/10/18 但不适用于 4/10/18 这是为了获得一个报告的日期范围,该报告在每个月的 10 号运行,适用于所有逾期 75 天且未在上个月报告中报告的帐户

DECLARE @TODAYS_DT DATE = '4/10/2018'

DECLARE @START_DT CHAR(10)
DECLARE @END_DT   CHAR(10)

SELECT  
    @START_DT = CONVERT(VARCHAR, DATEPART(MM, DATEADD(MM, -1, DATEADD(DAY, -75, '4/10/2018')))) + '/20/' + CONVERT(VARCHAR, DATEPART(YEAR, DATEADD(DAY, -75, '4/10/2018')))

SELECT  
    @END_DT = CONVERT(VARCHAR, DATEPART(MM, DATEADD(DAY, -75, '4/10/2018'))) + '/20/' + CONVERT(VARCHAR, DATEPART(YEAR, DATEADD(DAY, -75, '4/10/2018')))

SELECT  
    @START_DT, @END_DT

【问题讨论】:

  • 编辑您的问题并解释您要尝试做什么。为此目的,损坏的代码并不能很好地发挥作用。
  • 哪个结果代表您的问题?你期待什么日期呢?你为什么这么期待?您的会话使用什么语言环境(即 2018 年 4 月 10 日是指 10 月 4 日还是 4 月 10 日)?但大多数情况下,正如戈登所问的那样,你到底想做什么?因为可能有比对表示日期的字符串进行文本操作更简单的方法......
  • 您发布了一个代码损坏的问题,没有描述。您如何期望我们了解您想要完成的事情????学会提问!! stackoverflow.com/help/how-to-ask
  • 为什么你认为应该是 2017 年? 2018 年 4 月 10 日减去 75 天是 2018 年 1 月 24 日。
  • 按原样运行代码会得到@START_DT = '12/21/2018'@END_DT = '1/20/2018'。你想用这些日期做什么?正如马特所说,可能有一种更简单的方法来做你想做的事情。

标签: sql date dateadd datepart


【解决方案1】:

您需要更早地回到 2017 年。尝试减去 100 而不是 75。

DECLARE @TODAYS_DT DATE = '4/10/2018'

DECLARE @START_DT CHAR(10)
DECLARE @END_DT   CHAR(10)

SELECT  
    @START_DT = CONVERT(VARCHAR, DATEPART(MM, DATEADD(MM, -1, DATEADD(DAY, -100, '4/10/2018')))) + '/21/' + CONVERT(VARCHAR, DATEPART(YEAR, DATEADD(DAY, -100, '4/10/2018')))

SELECT  
    @END_DT = CONVERT(VARCHAR, DATEPART(MM, DATEADD(DAY, -100, '4/10/2018'))) + '/20/' + CONVERT(VARCHAR, DATEPART(YEAR, DATEADD(DAY, -100, '4/10/2018')))

SELECT  
    @START_DT, @END_DT

【讨论】:

  • 这是为了得到一个报告的日期范围,该报告在每个月的 10 日为所有逾期 75 天且未在上个月报告中报告的帐户生成
  • 那你为什么认为它应该回到 2017 年呢?
  • 因为 3/10/18 返回 12/20/18 结束日期和 4/10/2018 所以预期结果 12/20/2017 开始日期但返回 12/20/2018
猜你喜欢
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多