如何根据月份参数值将数据从一年的开始月份拉取到给定月份



如果我选择@rpmMonth = 2019年9月,它应该将数据从2019年1月提取到2019年9月 **我只有一个参数值,即 VARCHAR 类型的@rpmMonth。

Declare @firstDay Date=(
select convert(varchar(10),DATEADD(Year,-1*DateDiff(Year,getdate(),0),0),120))
Declare @CurDate Date=(
SELECT convert(varchar(10),DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)),120))
select * from YOURTABLE
where colname between @firstDay  and @CurDate 

理想情况下,您应该使用date数据类型,而不是varchar。但是,如果我们确实必须使用varchar那么您可以执行以下操作:

SELECT {Columns}
FROM {Your Schema And Table}
WHERE {DateColumn} >= CONVERT(date,CONCAT(RIGHT(@rpmMonth),'0101'))
AND {DateColumn} < DATEADD(MONTH, 1, CONVERT(date, '01 ' + @rpmMonth));

(显然替换大括号中的部分({}(,并假设LOGIN的语言是基于英语的语言。

这将为您提供@rpmMonth年 1 月 1 日或之后以及@rpmMonth年后一个月之前的所有行。

如果您使用正确的日期,并通过该月的第一个日期,即(2019-09-01您给出的样本(,那么您可以执行以下操作:

SELECT {Columns}
FROM {Your Schema And Table}
WHERE {DateColumn} >= DATEADD(YEAR, DATEDIFF(YEAR, 0, @rpmMonth),0)
AND {DateColumn} < DATEADD(MONTH, 1, @rpmMonth);

SQL Server在转换日期值方面非常出色。 您应该能够执行以下操作:

select . . .
from t cross join
(values (convert(date, @rpmMonth)) as v(dte)
where datecol >= datefromparts(year(v.dte), 1, 1) and
datecol < datefromparts(year(dateadd(month, 1, v.dte)), month(dateadd(month, 1, v.dte)), 1)

最新更新