【问题标题】:Check date interval with SQL Server使用 SQL Server 检查日期间隔
【发布时间】:2009-12-23 16:53:08
【问题描述】:

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

但它不起作用。

我该怎么办?

谢谢

【问题讨论】:

    标签: sql-server stored-procedures date


    【解决方案1】:

    首先,为了确保无论服务器上的语言和区域设置如何,您的日期算法都能正常工作,请使用 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
    

    这对你有用吗?

    【讨论】:

      【解决方案2】:

      以下代码有效:

      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 表进行测试。

      • 您的搜索字段是实际日期吗(而不是字符类型)
      • 变量中是否有多余的空格等
      • 您收到错误或只是返回错误的记录

      【讨论】:

        【解决方案3】:

        试试这个:(使@Anno和@Mese整数)

          Where FinePeriodo Between DateAdd(month, 12*(@Anno-1900) + @Mese, 0)
                               And  DateAdd(month, 12*(@Anno-1900) + @Mese + 1, 0)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-04
          • 1970-01-01
          相关资源
          最近更新 更多