SQL 13 месяцев транзакции и количество извлечения данных с разбивкой по месяцам
Я читал пару старых постов и пытался применить ту же логику к моему вопросу, мне нужно извлечь данные за 13 месяцев с разбивкой по месяцам, я также хотел бы применить данные к соответствующим заголовкам... любые предложения. Пожалуйста, смотрите код ниже и ошибка получена.
SELECT ST.TXDATE, ST.CODE, ST.QUANTITY
FROM StocTran ST
WHERE ST.TXDATE >= DATEADD(MONTH, -13, CAST(GETDATE() AS DATE))
ORDER BY ST.TXDATE
ОШИБКА: [Elevate Software][DBISAM] Ошибка DBISAM Engine # 11949 Ошибка синтаксического анализа SQL - ожидаемый конец оператора, но он найден (в операторе SELECT SQL в строке 3, столбец 27, код ошибки: 11949
1 ответ
DATEADD - это функция в TransactSQL MS для Sql Server. Я не знаю, что DBIsam поддерживает его, и он не указан в списке поддерживаемых функций DBIsam здесь:
Как правило, функции даты не переносимы между различными механизмами SQL, и из этого списка одной из возможностей может быть использование EXTRACT
функция вместо:
Функция EXTRACT возвращает конкретное значение из значения даты, времени или метки времени. Синтаксис выглядит следующим образом:
EXTRACT(extract_value
FROM column_reference or expression)
EXTRACT(extract_value,
column_reference or expression)
Используйте EXTRACT для возврата года, месяца, недели, дня недели, дня, часов, минут, секунд или миллисекунд из столбца даты, времени или метки времени. EXTRACT возвращает значение для указанного элемента в виде целого числа.
Параметр extract_value может содержать любой из спецификаторов: YEAR MONTH WEEK DAYOFWEEK DAYOFYEAR DAY HOUR MINUTE SECOND MSECOND
Даже если вы спешите, я настоятельно рекомендую вам внимательно изучить эту страницу.
ОБНОВЛЕНИЕ: от поиска в Google dbisam dateadd
похоже, у Elevate нет хорошего ответа на эквивалент DATEADD
, Одним из хитов является эта тема:
https://www.sqlservercentral.com/Forums/Topic173627-169-1.aspx
который предложил альтернативный способ сделать это с помощью встроенных в Delphi функций даты (например, IncMonth
который я предложил вам использовать в ответе на другой вопрос. По сути, вы должны вычислить даты начала и окончания диапазона дат, а затем преобразовать их в строки, чтобы создать предложение WHERE с датой столбца (из вашей базы данных), которая равна или больше даты начала и меньше или равно дате окончания.