sql - 选择特定日期 SQL

标签 sql sql-server

我有一个报告,我应该每月运行一次,并选择从去年同月21日到今年当月20日的数据。 即现在是 8 月 29 日,今天我需要运行我的报告,但我希望它仅显示 2016 年 8 月 21 日至 2017 年 20 月 8 日的数据,当我在 9 月运行它时,我想要 2016 年 20 月 9 日至 2017 年 9 月 21 日的数据。 .

我正在使用

Select *
from invt
where DATE > (GETDATE()-365)   

但这只是近似值,我必须在每月 20 日准确运行报告。

知道该怎么做吗? TIA

最佳答案

应该与:

SELECT *
  FROM invt
 WHERE DATE BETWEEN 
       DATEADD(YEAR,-1,DATEADD(DAY,19,DATEADD(MONTH,DATEDIFF(MONTH,0,GETDATE()),0)))
   AND DATEADD(DAY,20, DATEADD(MONTH,DATEDIFF(MONTH,0, GETDATE()),0))

看起来很吓人,但它基本上做的是简单的事情:

去年 20 日:

  • 获取当前日期
  • 只取月份(月初)
  • 添加 19 天(现在是本月 20 日)
  • 减去一年

本月 21 日的逻辑几乎相同。只是不减去一年。

关于sql - 选择特定日期 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45947648/

相关文章:

mysql - 如何将 SQL 源代码转换为伪代码

sql - 将逗号分隔的值放入单独或不同的列中

MySQL 存储过程 : How to declare a Cursor for a Select from a temporary table?

sql - 带 CASE 和 LEFT 语法的 SUM

sql - 对于这种情况,是否存在单个自联接?

.net - Crystal Reports 2008 和 .mdf 文件有哪些先决条件

sql - 使用 SP_ExecuteSQL 时返回 NULL 数据值

sql - 谁只在 SQL 中将数据插入奇数/偶数行

c# - 如何在 C# 中将 byte[] 转换为日期时间?

mysql - SQL - 将一个表中多个列中的两行匹配到另一个表中的 1 行。