2013-08-09 2 views
0

Моя база данных похожа на «2013-07-09» - это 9 августа. SYSDATE() - «2013-08-09», также 9 августа. Когда я собираюсь взять данные в базу данных, используя этот SYSDATE() в принимает 08, который является номером месяца сентября. Итак, я хочу вычесть один месяц в SYSDATE().Как вычесть один месяц в SYSDATE() в mysql?

+0

'2013-07-09' - 9 августа 2012 в базе данных? Почему вы храните 1 меньше, чем номер месяца, и как вы его храните? «ДАТА»? 'VARCHAR'? –

+0

@JoachimIsaksson: - Я храню его в DateFormat –

+0

@JoachimIsaksson: - Я имею в виду в дате. –

ответ

2

Что-то странное происходит в вашей базе данных. Мне кажется, что системное время задано неправильно или что-то еще не так.

«2013-07-09» - девятое июля 2013 года. «Yyyy-mm-dd» - это макет. «2013-08-09» - девятое августа 2013 года.

Неверный и правильно настроенный экземпляр MySQL, где «2013-07-09» означает девятое августа или наоборот. Месяц «08» никогда не означал сентября. Итак, если ваши даты имеют какое-либо значение, вам нужно быстро разобраться в этом. Системы СУБД, загруженные множеством данных с затухающими датами, являются постоянным кошмаром: я знаю это из-за большого опыта.

Если вам нужна дата за месяц до any_date, используйте это выражение MySQL.

DATE_SUB(whatever_date, INTERVAL 1 MONTH) 

Там что-то еще вам нужно знать: NOW() означает то же самое, что SYSDATE() с небольшим отличием: NOW() вычисляется только один раз во время выполнения каждого запроса, в то время как SYSDATE() повторно оценивается каждый раз, когда ядро ​​базы данных хочет к. Большинство программистов считают NOW() лучшим выбором, потому что он детерминирован.

1

DATE_SUB (sysdate(), INTERVAL 1 MONTH) даст вам sysdate минус один месяц.

+0

@ mti2935: - Я уже пробовал это, но он не работает –

1
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH) 
+0

Я хочу сделать это для SYSDATE, а не для now(). –

Смежные вопросы