MySQL — Не удается конвертировать из MSSQL

#mysql #sql-server

#mysql #sql-сервер

Вопрос:

Пытаюсь преобразовать эту инструкцию MSSQL 2012R2 в MySQL 5.7

 SELECT SUM(Cost   Credit_Amount) As Daily_Cost FROM Google_Costing
WHERE Date BETWEEN DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE() -2), 0) AND     
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE() -2)   1, 0)
  

Я пытался заменить DATEADD на DATE_ADD и DATEDIFF на TIMESTAMPDIFF , но по-прежнему безуспешно. Приветствуется любая помощь.

Я получаю сообщение об ошибке:

Неправильный подсчет параметров при вызове встроенной функции ‘DATEDIFF’

Поэтому я меняю инструкцию на:

 SELECT SUM(Cost   Credit_Amount) As Daily_Cost FROM Google_Costing
WHERE Date BETWEEN DATE_ADD(MONTH, TIMESTAMPDIFF(MONTH, 0, GETDATE() -2), 0) AND 
DATE_ADD(MONTH, TIMESTAMPDIFF(MONTH, 0, GETDATE() -2)   1, 0)
  

На этот раз я получаю сообщение об ошибке:

У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘TIMESTAMPDIFF(MONTH, 0, GETDATE() -2), 0) И DATE_ADD(MONTH, TIMESTAMPDIFF(MONT’ в строке 2

Комментарии:

1. Какую ошибку это выдает?

2. У вас есть имя столбца MONTH ? Если это так, попробуйте заключить это в квадратные скобки [MONTH] или отметить галочками. Я рекомендую не использовать зарезервированные слова для имен столбцов…

3. Кроме того, смотрите DATE_ADD ссылку для правильного использования: dev.mysql.com/doc/refman/5.5/en /…

4. Нет столбца с именем month, при использовании MSSQL DATEADD позволяет первой позиции определять интервал, в данном случае МЕСЯЦ. Я проверю ссылку на MSQL, чтобы посмотреть, смогу ли я это выяснить.

5. Какой результат вы ожидаете от этого запроса?

Ответ №1:

Попробуйте эти файлы cookie…

 SELECT SUM(Cost   Credit_Amount) As Daily_Cost FROM Google_Costing
WHERE Date BETWEEN DATE_FORMAT(NOW() ,'%Y-%m-01') 
AND DATE_ADD(CURDATE(), INTERVAL -2 DAY)
  

Комментарии:

1. Это сработало точно так, как планировалось! Большое вам спасибо за помощь!