【问题标题】:SQL 13 months transaction and quantity data extract broken down per monthSQL 13 个月的交易和数量数据提取每月细分
【发布时间】:2018-01-09 11:37:44
【问题描述】:

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

【问题讨论】:

  • 你能链接一些旧帖子吗?
  • DATEADD 是 MS TransactSQL for Sql Server 中的一个函数。你确定 DBIsam 支持DATEADD
  • 您打算如何应对其中一个月会出现两次的事实?
  • @DanBracuk:如果您将 WHERE 子句表示为日期范围,那没有什么区别。

标签: sql delphi dbisam


【解决方案1】:

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 参数可以包含任何一个说明符: 年 月 星期 星期几 一年的日子 天 小时 分钟 第二 毫秒

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

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

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

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

【讨论】:

  • 您对如何使用此数据提取功能创建变量报告有任何建议,例如: EXTRACT(MONTH FROM SaleDate) AS MonthNo - 1, EXTRACT(MONTH FROM SaleDate) AS MonthNo -2 .. .等等?
  • 不,因为我没有 DBIsam 的副本来测试它。但基本上它会涉及构建一个与 DATEADD 等效的 WHERE 子句。询问这个问题的人是 DBIsam 的出版商 E​​levate Software。
  • 感谢您的帮助,但也许我不应该尝试重新发明轮子,而是操纵我已经必须给我额外一个月的数据的代码。无论如何我可以给你一些你可以看的代码,我不想在论坛上发布所有这些代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
  • 1970-01-01
  • 2015-06-24
  • 2021-10-02
相关资源
最近更新 更多