使用SQL Server检查日期间隔

时间:2009-12-23 16:53:08

标签: sql-server stored-procedures date

您好,在存储过程中我想选择一个月间隔的行 @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)) 

但它不起作用。

我该怎么办?

感谢

3 个答案:

答案 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)