我在选择我的桌子的行时遇到了一些麻烦,这些行的日期是今天之前的3个月。我尝试在where子句中使用DATE(NOW() - INTERVAL 3 MONTH)
,但没有运气。如果项目超过3个月,我如何签入SQL Server?
UPDATE[TCTdb].[dbo].[Stock]
SET[Warehouse] = 'old'
WHERE [ManufacturedDate] <= DATE(NOW() - INTERVAL 3 MONTH)
答案 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
希望有所帮助,
约翰