您好,在存储过程中我想选择一个月间隔的行 @Anno是开始的一年,@Mese是日期开始的月份。我试试这个:
WHERE FinePeriodo >= CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime)
AND FinePeriodo <
DATEADD(month, 10, CAST(
(@Anno + '-' + @Mese + '-01 00:00:00') as datetime))
但它不起作用。
我该怎么办?
感谢
答案 0 :(得分:0)
首先,为了确保您的日期算术无论服务器上的语言和区域设置如何都可以使用,请使用ISO-8601格式YYYYMMDD
作为您的日期。
在这种情况下,您应该可以执行以下操作:
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
-- this assume @Anno and @Mese are already VARCHAR variables!
SET @StartDate = CAST(@Anno + RIGHT('00'+@Mese, 2) + '01' AS DATETIME)
SET @EndDate = DATEADD(MONTH, 1, @StartDate)
然后在WHERE子句中,使用:
WHERE FinePeriodo BETWEEN @StartDate AND @EndDate
这对你有用吗?
答案 1 :(得分:0)
以下代码有效:
declare @anno VARCHAR(4)
declare @mese VARCHAR(2)
SET @Anno = '2006'
SET @mese = '6'
SELECT CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime) as BeginMOnth,
DATEADD(month,10,CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime)) as EndMonth
select [name],crDate from sysobjects
WHERE crDate >= CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime)
AND crDate < DATEADD(month,10,CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime))
使用sysobjects表进行测试。
答案 2 :(得分:0)
试试这个:(制作@Anno和@Mese整数)
Where FinePeriodo Between DateAdd(month, 12*(@Anno-1900) + @Mese, 0)
And DateAdd(month, 12*(@Anno-1900) + @Mese + 1, 0)