如果测试是否超过3个月,您如何测试?

时间:2011-08-03 18:47:39

标签: sql sql-server tsql

我在选择我的桌子的行时遇到了一些麻烦,这些行的日期是今天之前的3个月。我尝试在where子句中使用DATE(NOW() - INTERVAL 3 MONTH),但没有运气。如果项目超过3个月,我如何签入SQL Server?

  UPDATE[TCTdb].[dbo].[Stock]
     SET[Warehouse] = 'old'
   WHERE [ManufacturedDate] <= DATE(NOW() - INTERVAL 3 MONTH)

4 个答案:

答案 0 :(得分:42)

您的语法似乎有误。

那应该是

UPDATE[TCTdb].[dbo].[Stock]
    SET[Warehouse] = 'old'
WHERE [ManufacturedDate] <= DATEADD(mm, -3, GETDATE())

答案 1 :(得分:8)

使用dateadd()

update [TCTdb].[dbo].[Stock]
set [WareHouse] = 'old'
where [ManufacturedDate] < dateadd(month,-3,getdate())

我建议dateadd()超过datediff(),因为我认为使用datediff()日期部分month会产生意外结果。

请考虑以下语句都返回3

select datediff(month, '1/1/2011','4/1/2011')
select datediff(month, '1/1/2011','4/30/2011')

要么在这种特殊情况下工作......请记住这种行为。

答案 2 :(得分:2)

DATEDIFF功能应该对您有所帮助:

http://msdn.microsoft.com/en-us/library/ms189794.aspx

UPDATE[TCTdb].[dbo].[Stock]
    SET[Warehouse] = 'old'
    WHERE DATEDIFF(month, [ManufacturedDate], GETDATE()) > 3

答案 3 :(得分:1)

尝试DATEDIFF:

SELECT 
    case 
        when DATEDIFF(month, '2005-12-31' , '2006-04-01 ') > 3
        then 'yes'

        else 'no'

    end

希望有所帮助,

约翰