2

我正在阅读一些较旧的帖子并尝试将相同的逻辑应用于我的问题,我需要提取每月分解的 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] DISAM 引擎错误#11949 SQL 解析错误 - 预期语句结束,但发现(在第 3 行第 27 列的 SELECT SQL 语句中错误代码:11949

4

1 回答 1

4

DATEADD 是 MS TransactSQL for Sql Server 中的一个函数。我不知道 DBIsam 是否支持它,并且它没有在 DBIsam 的支持功能列表中列出:

https://www.elevatesoft.com/manual?action=viewtopic&id=dbisam4&product=delphi&version=7&topic=functions

通常,日期函数不能跨不同的 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

即使您很着急,我强烈建议您仔细研究该页面。

更新:从谷歌搜索dbisam dateadd来看,Elevate 似乎没有一个好的答案,相当于DATEADD. 其中一个热门是这个线程:

https://www.sqlservercentral.com/Forums/Topic173627-169-1.aspx

这建议了一种使用 Delphi 内置日期函数的替代方法(就像IncMonth我建议您在另一个 q 的答案中使用的那样。基本上,您将计算一系列日期的开始日期和结束日期,然后将它们转换到字符串以构造一个 WHERE 子句,其列日期(来自您的数据库)等于或大于开始日期且小于或等于结束日期。

于 2018-01-09T11:49:04.617 回答