Sql server 如何仅按月份和年份筛选结果?
我使用SQL SERVER 2012 我已存储了以下文件:Sql server 如何仅按月份和年份筛选结果?,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我使用SQL SERVER 2012 我已存储了以下文件: ALTER PROCEDURE [dbo].[SP_TEST_TLP] @DateFrom date, @DateTo date AS BEGIN SET NOCOUNT ON; select * from Clients WHERE DateReview between (@DateFrom) and (@DateTo) END 如您所见,我将两个参数传递给上面的存储过程,这
ALTER PROCEDURE [dbo].[SP_TEST_TLP]
@DateFrom date,
@DateTo date
AS
BEGIN
SET NOCOUNT ON;
select *
from Clients
WHERE DateReview between (@DateFrom) and (@DateTo)
END
如您所见,我将两个参数传递给上面的存储过程,这些参数用于在where子句中过滤结果
我的问题是,我只需要按月份和年份过滤结果
例如,如果我已传递这些参数:
@DateFrom date = '2016-05-15' ,
@DateTo date = '2016-10-09'
根据存储过程,我将在上述日期之间获得结果。但我需要从月初05
和月底10I,e获取行。结果应与以下参数等效:
@DateFrom date = '2016-05-01'
@DateTo date = '2016-10-31'
我怎样才能得到想要的结果?这里有一种方法:
select *
from Clients
where DateReview >= dateadd(day, 1 - day(@DateFrom), @DateFrom) AND
DateReview < dateadd(month, 1, dateadd(day, 1 - day(@DateTo), @DateTo))
试试这个:
这里
DATEADD(dd,-(DAY(@DateFrom)-1),@DateFrom)
这将给出几个月的开始日期,即'2016-05-01'
及
DATEADD(dd,-(DAY)(DATEADD(mm,1,@DateTo))),DATEADD(mm,1,@DateTo))
将给出月末日期,即'2016-10-31'
ALTER PROCEDURE [dbo].[SP_TEST_TLP]
@DateFrom date,
@DateTo date
AS
BEGIN
SET NOCOUNT ON;
SET @DateFrom = DATEADD(dd,-(DAY(@DateFrom)-1),@DateFrom)
SET @DateTo = DATEADD(dd,-(DAY(DATEADD(mm,1,@DateTo))),DATEADD(mm,1,@DateTo))
Updated ---^
select *
from Clients
WHERE DateReview between (@DateFrom) and (@DateTo)
END
您还可以使用
EOMONTH
功能
select *
from Clients
WHERE DateReview between DATEADD(DAY,1,EOMONTH(@DateFrom,-1) ) and EOMONTH(@DateTO)
ALTER PROCEDURE [dbo].[SP_TEST_TLP]
@DateFrom date,
@DateTo date
AS
BEGIN
SET NOCOUNT ON;
select *
from Clients
WHERE DateReview between Dateadd(d,1,EOMonth(@DateFrom,-1)) and EOMonnth(@DateTo)
END
可以使用EOMonth()函数
select *
from Clients
WHERE DateReview between DATEADD(DAY,1,EOMONTH(@DateFrom,-1) ) and EOMONTH(@DateTO)
ALTER PROCEDURE [dbo].[SP_TEST_TLP]
@DateFrom date,
@DateTo date
AS
BEGIN
SET NOCOUNT ON;
select *
from Clients
WHERE DateReview between Dateadd(d,1,EOMonth(@DateFrom,-1)) and EOMonnth(@DateTo)
END
为什么需要-1?-1是一个整数表达式,指定要向@DateFrom添加或减去的月数。更多的访问。