我有以下存储过程:
create procedure spListing
(@oMonth int, @oYear int)
AS
BEGIN
SELECT oDate, oValue
FROM oTable
WHERE DATEPART(MONTH, oDate) = @oMonth
AND DATEPART(YEAR, oDate) = @oYear
END
它将根据给定参数选择所选月份和年份的所有值。
我想在给定参数的基础上和之后选择1天。
例如:如果@oMonth ='9'且@oYear ='2014',则会显示2014年8月31日至2014年10月1日的列表。
有谁知道如何实现这个目标?
谢谢。
答案 0 :(得分:2)
首先找到需要获取数据的两个日期。
DECLARE @oMonth INT=9,
@oYear INT=2014,
@date DATE
SELECT @date = Cast (CONVERT(VARCHAR(4), @oYear) + '-'
+ CONVERT(VARCHAR(2), @oMonth) + '-01' AS DATE)
SELECT Dateadd(day, -1, @date) -- 2014-08-31(Startdate)
SELECT Dateadd(day, 1, Dateadd(day, -Day(@date), Dateadd(month, 1, @date))) --2014-10-01 (Endate)
现在您可以使用上述查询来过滤结果。像这样更改您的SP。
CREATE PROCEDURE Splisting (@oMonth INT,
@oYear INT)
AS
BEGIN
DECLARE @date DATE
SELECT @date = Cast (CONVERT(VARCHAR(4), @oYear) + '-'
+ CONVERT(VARCHAR(2), @oMonth) + '-01' AS DATE)
SELECT oDate,
oValue
FROM oTable
WHERE oDate BETWEEN Dateadd(day, -1, @date)
AND Dateadd(day, 1, Dateadd(day, -Day(@date), Dateadd(month, 1, @date)))
END
答案 1 :(得分:1)
我相信这回答了你的问题:
CREATE PROCEDURE spListing
(@oMonth int, @oYear int)
AS
BEGIN
DECLARE @day int = 1;
DECLARE @startDate date = DATEADD(day,-1,DATEADD(mm, (@oYear - 1900) * 12 + @oMonth - 1 , @day - 1))
DECLARE @endDate date = DATEADD(month,1,DATEADD(mm, (@oYear - 1900) * 12 + @oMonth - 1 , @day - 1))
SELECT oDate, oValue
FROM oTable WHERE oDate
BETWEEN @startDate AND @endDate
END