Ответ 1
Ваш синтаксис кажется неправильным.
Это должно быть
UPDATE[TCTdb].[dbo].[Stock]
SET[Warehouse] = 'old'
WHERE [ManufacturedDate] <= DATEADD(mm, -3, GETDATE())
У меня возникли проблемы с выбором строк моей таблицы, у которых есть дата за 3 месяца до сегодняшнего дня. Я попытался использовать DATE(NOW() - INTERVAL 3 MONTH)
в моей статье where, но не повезло. Как проверить SQL Server, если элемент старше 3 месяцев?
UPDATE[TCTdb].[dbo].[Stock]
SET[Warehouse] = 'old'
WHERE [ManufacturedDate] <= DATE(NOW() - INTERVAL 3 MONTH)
Ваш синтаксис кажется неправильным.
Это должно быть
UPDATE[TCTdb].[dbo].[Stock]
SET[Warehouse] = 'old'
WHERE [ManufacturedDate] <= DATEADD(mm, -3, GETDATE())
Используйте dateadd()
.
update [TCTdb].[dbo].[Stock]
set [WareHouse] = 'old'
where [ManufacturedDate] < dateadd(month,-3,getdate())
Я предлагаю dateadd()
над datediff()
потому что я думаю, что вы получите неожиданные результаты, используя datediff()
с month
datepart.
Учтите, что следующие утверждения возвращают 3
:
select datediff(month, '1/1/2011','4/1/2011')
select datediff(month, '1/1/2011','4/30/2011')
Либо работает в этом конкретном случае... Просто помните об этом.
Функция DATEDIFF должна быть полезной для вас:
http://msdn.microsoft.com/en-us/library/ms189794.aspx
UPDATE[TCTdb].[dbo].[Stock]
SET[Warehouse] = 'old'
WHERE DATEDIFF(month, [ManufacturedDate], GETDATE()) > 3
попробуйте DATEDIFF:
SELECT
case
when DATEDIFF(month, '2005-12-31' , '2006-04-01 ') > 3
then 'yes'
else 'no'
end
Надеюсь, что это поможет,
Джон