Как вы проверяете, если что-то старше 3 месяцев? - PullRequest
17 голосов
/ 03 августа 2011

У меня возникли проблемы с выбором строк в моей таблице, дата которой на 3 месяца раньше сегодняшней.Я попытался использовать DATE(NOW() - INTERVAL 3 MONTH) в моем предложении where, но безуспешно.Как я могу проверить в SQL Server, если элемент старше 3 месяцев?

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

Ответы [ 4 ]

42 голосов
/ 03 августа 2011

Ваш синтаксис неверен.

Это должно быть

UPDATE[TCTdb].[dbo].[Stock]
    SET[Warehouse] = 'old'
WHERE [ManufacturedDate] <= DATEADD(mm, -3, GETDATE())
8 голосов
/ 03 августа 2011

Использование 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')

Либо работает в данном конкретном случае ... Просто помните об этом поведении.

2 голосов
/ 03 августа 2011

Функция DATEDIFF должна быть вам полезна:

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

UPDATE[TCTdb].[dbo].[Stock]
    SET[Warehouse] = 'old'
    WHERE DATEDIFF(month, [ManufacturedDate], GETDATE()) > 3
1 голос
/ 03 августа 2011

Попробуйте DATEDIFF:

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

        else 'no'

    end

Надеюсь, это поможет,

John

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...