2015-11-24 2 views
1

Я перенесла базу данных моего приложения из SQL Server в MySQL. Теперь я корректирую код приложения, и у меня возникают проблемы с функциями даты. В частности, похоже, что DateDiff() SQL Server округляется, а TimestampDiff() MySQL округляется. Например:SQL Server DateDiff() vs MySQL TimestampDiff()

SQL Server: select datediff(day,'2015-11-25 12:00:00', '2015-11-26') returns 1 

MySQL: select timestampdiff(day,'2015-11-25 12:00:00', '2015-11-26') returns 0 

Что было бы лучшим способом заставить MySQL вернуть те же результаты, что и SQL Server? Я не могу просто добавить 1 к каждому выражению diff в MySQL, потому что в тех случаях, когда разница между date1 и date2 составляет ровно X дней, MySQL оценивается точно так же, как оценивает SQL Server. Например:

SQL Server: select datediff(day,'2015-11-25', '2015-11-26') returns 1 

MySQL: select timestampdiff(day,'2015-11-25', '2015-11-26') returns 1 

EDIT: комментарии предлагают только конверсии для различий в Днях. Я также должен поддерживать разницу во второй, неделя, месяц, год и т.д.

+0

Вы можете рассчитывать вместо часов? –

+2

Если это помогает кому-то, кто знает ответы MySQL, SQL Server не «округляет»; SQL Server просто подсчитывает количество дней * границ * между двумя раз. Так, например, разница «день» между «2015-11-25 23: 58: 00» и «2015-11-25 23: 59: 00» равна 0, так как границы не пересекаются. Однако разница «день» между «2015-11-25 23: 59: 00' и« 2015-11-26 00: 00: 00 »равна 1, поскольку граница дня пересекается. Если вы просто отключили компонент времени от дат перед сравнением, я предполагаю, что вы получите тот же ответ с MySQL. –

+0

@matt о том же значении с дневным приложением? –

ответ

1

Если бы я делал это, я бы написать хранимую функцию SQL_SERVER_DATEDIFF() как обертка вокруг MySQL TIMESTAMPDIFF() с настройками, чтобы заставить его вести себя как SQL Server DATEDIFF() и выполните поиск/замену кода. Это дает вам возможность исправить эту проблему, а также любые другие проблемы, которые могут возникнуть в будущем.

+0

Это, вероятно, маршрут, который я возьму. Тем не менее, мне все же нужно выяснить, как лучше всего перевести различные разностные единицы и построить их в функции. Поскольку теперь кажется, что SQL Server подсчитывает границы раздела, в то время как MySQL выполняет округленное вычитание двух дат, он начинает очень сложно. – rawk

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