SQL Date CONVERT - PullRequest
       4

SQL Date CONVERT

0 голосов
/ 03 декабря 2011

У меня есть следующий фрагмент кода, который даст мне дату за 1 месяц до указанной мной даты. Например, если я хотел получить дату за 1 месяц до 30.11.11, приведенный ниже код даст результат 2011/10/31

    select CONVERT(DATETIME, DATEADD(d,-1,DATEADD(mm, DATEDIFF(m,0,'11-30-11'),0)), 102)

Как я могу изменить приведенный выше код, чтобы он возвращал дату за два месяца до указанной мной даты, чтобы он возвращал 2011/09/30, если я укажу '11 -30-11 'в коде?

Я не очень понимаю, как работает приведенный выше код? Я попытался изменить -1 на -2, но это только вычитает 1 день и 1 месяц, поэтому он вернется 2011/10/30 вместо 31.10. Мне нужно вернуть 2011/09/30, что на 2 месяца меньше даты в коде (11-30-11).

1 Ответ

3 голосов
/ 03 декабря 2011
CONVERT(DATETIME, 
         DATEADD(d,-1,
             DATEADD(mm, DATEDIFF(m, 32,'20111130'), 0) -- use yyyymmdd and 32
         )
    , 102)

DATEADD / DATEDIFF с 0 сравнивается с 01 января 1900 года. Поэтому измените его на 32, чтобы сделать его 01 февраля 1900

Кроме того, ваш формат даты небезопасен.Используйте yyyymmdd для SQL Server

И, возможно, проще, как это

DATEADD(d, -1, DATEADD(mm, -2, DATEADD(d, 1,'20111130')))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...