在 Sybase 中使用 Datediff(...Dateadd(...),Getdate()) 时键入 Clash

Type Clash when using Datediff(...Dateadd(...),Getdate()) in Sybase

我换过公司,从 SQL Server 换到了 Sybase-ASE。我不知道我是不是脑子放屁,编码不正确,还是 SQL ServerSybase-ASE 中的 运行 Datediff(...Dateadd(...),Getdate()) 有区别。当 运行 下面的代码时,我在公式的 Datediff 一侧得到了 type clash (INT)。 运行 Dateadd 本身就可以正常工作。不确定是否需要调整某些内容或无法在 Sybase-ASE 中完成。有什么帮助吗?我检查了这些其他问题,但没有真正的帮助 (Subtract one day from datetime GETDATE last month Get the records of last month in SQL server Datediff GETDATE Add)

SELECT TOP 5 *

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

另外,附带问题:如果有人碰巧知道,我不记得获取整个上个月的具体公式是什么在 Datediff 中。我能弄明白我只是觉得最好用一块石头杀死两只鸟。将 Dates table 实施到生产中显然有些困难...

没关系,多亏了这个post(Get the records of last month in SQL server)

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

在内置函数方面,ASE 和SQLServer 几乎相同。然而,有一个区别,这就是您可能会遇到的问题。在 SQLServer 中,您可以使用数值作为日期,它在 SQLServer 中被解释为 #days since 01-01-1900。 ASE 不支持使用数值作为日期,你会得到一个语法错误。