SQL 13个月的交易和数量数据提取每月细分

时间:2018-01-09 11:37:44

标签: sql delphi dbisam

我正在阅读几篇较旧的帖子并尝试将相同的逻辑应用于我的问题,我需要提取每月分解的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
  

错误:[提升软件] [DBISAM] DBISAM引擎错误#11949 SQL   解析错误 - 语句的预期结束但是找到了(在   第3行,第27列的SELECT SQL语句错误代码:11949

1 个答案:

答案 0 :(得分: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参数可以包含任何一个说明符:   年   月   周   DAYOFWEEK   DAYOFYEAR   天   小时   分钟   第二   MSECOND

即使你匆忙,我也强烈建议你仔细研究那个页面。

更新:通过Google搜索dbisam dateadd,看起来Elevate对于等同于DATEADD的答案不是很好。其中一个点是这个帖子:

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

建议使用Delphi的内置日期函数(比如IncMonth)使用另一种方法来回答另一个问题。我基本上会计算开始和一系列日期的结束日期,然后将它们转换为字符串以构造一个WHERE子句,其中列日期(来自您的数据库)等于或大于开始日期且小于或等于结束日期。