Конфликт типов при использовании Datediff(Dateadd(),Getdate()) в Sybase

Я сменил компанию и при этом перешел с SQL Server на Sybase-ASE. Я не могу сказать, то ли у меня просто пукает мозг, и я неправильно кодирую, то ли есть разница между запуском Datediff(...Dateadd(...),Getdate()) в SQL Server и Sybase-ASE. Я получаю type clash (INT) на стороне Datediff формулы при запуске кода ниже. Запуск Dateadd сам по себе работает нормально. Не уверен, что нужно что-то подправить или это просто невозможно сделать в Sybase-ASE. Любая помощь? Я проверил эти другие вопросы, но никакой реальной помощи (Вычтите один день из даты и времени GETDATE за последний месяц Получить записи за последний месяц на сервере SQL Datediff GETDATE Добавить)

SELECT TOP 5 *

FROM SalesData fm
WHERE fm.Date = DATEDIFF(MONTH, DATEADD(MONTH,-1,MAX(fm.Date)),GETDATE())

ТАКЖЕ, побочный вопрос: я не могу вспомнить конкретную формулу, чтобы получить весь последний месяц в Datediff, если кто-нибудь знает. Я могу понять это, я просто понял, что лучше убить двух зайцев одним выстрелом. По-видимому, несколько сложно внедрить таблицу Dates в производство...


person plankton    schedule 07.07.2016    source источник


Ответы (2)


Что касается встроенных функций, ASE и SQLServer практически идентичны. Однако есть одно отличие, и это то, что вы можете ударить. В SQLServer вы можете использовать числовое значение для даты, которая интерпретируется в SQLServer как количество дней с 01-01-1900. ASE не поддерживает использование числовых значений в качестве даты, и вы получите синтаксическую ошибку.

person RobV    schedule 07.07.2016

Неважно, я получил это благодаря этому сообщению (Получить записи за последний месяц на сервере SQL)

where DATEPART(MONTH,fm.Date) = DATEPART(MONTH, DATEADD(MONTH,-1,GETDATE()))
AND DATEPART(YEAR,fm.Date) = DATEPART(YEAR, DATEADD(YEAR,0,GETDATE()))
person plankton    schedule 07.07.2016