繁体   English   中英

T-SQL:如何获取当月第一天之前的所有记录?

[英]T-SQL: How to get all records prior to the first day of the current month?

使用SQL Server:我正在尝试查找当月第一天之前的所有记录,并将其设置为SSRS报告中的参数(因此我不能使用静态值)。

因此,我需要在每个当前月的第一天之前的CREATEDDATETIME列('yyyy-mm-dd')中的所有记录。

我已经看到了很多关于如何查找特定月份的记录以及各种其他搜索的主题,但是都没有与上述主题特别相关的主题。 有兴趣了解EOMONTH函数是否将在此处使用。

感谢您的帮助和建议。

这是一个将EOMONTH()函数与可选参数-1一起使用的表达式。

说明:

DateAdd:将1天添加到表达式中

getdate是当前日期

EOMONTH是给定月份的结束日期; 但是,如果您输入一个可选的整数-1,则表示上个月

因此:本月的第一天是上个月的一天的最后一天加上一天

SELECT DATEADD(DAY,1,EOMONTH(getdate(),-1));

Result: 2018-04-01

所以在您的查询:

select * 
from table 
where CREATEDDATETIME < DATEADD(DAY,1,EOMONTH(getdate(),-1));

我会用datefromparts()

select t.*
from t
where CREATEDDATETIME < datefromparts(year(getdate()), month(getdate()), 1);

已经有另外两个可行的答案,但是为了完整起见,这是第三种常用技术:

SELECT *
FROM [table] 
WHERE CREATEDDATETIME < dateadd(month, datediff(month,0, current_timestamp), 0)

您可能还会得到建议使用字符串构建日期的答案。 不要那样做 它是您可以使用的效率最低和最容易出错的选项。

所有三个答案都是伟大的,你有多发现它会在当月的第一天,直至1日之前的所有数据选择Createdate 这可能会导致报表永久运行,也许是为了限制代码,我将使用类似的方式来生成仅提供上个月详细信息的报表。

Select [columns] 
from [source]
where [Createdate] between
/*First day of last Month*/
DATEADD(mm, DATEDIFF(mm, 0, Getdate())-1, 0 and
/*First day of this Month*/
dateadd(mm,datediff(mm,0,Getdate()),0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM