【发布时间】:2021-12-28 09:55:18
【问题描述】:
我有疑问:
WITH STAN_IND
AS (
SELECT ro.kod_stanow, ro.ind_wyrob||' - '||ro.LP_OPER INDEKS_OPERACJA, count(*) ILE_POWT
FROM M_REJ_OPERACJI ro
JOIN M_TABST st ON st.SYMBOL = ro.kod_stanow
WHERE (st.KOD_GRST starting with 'F' or (st.KOD_GRST starting with 'T') ) AND ro.DATA_WYKON>'NOW'-100
GROUP BY 1,2)
SELECT S.kod_stanow, count(*) ILE_INDEKS, SUM(ILE_POWT-1) POWTORZEN
from STAN_IND S
GROUP BY S.kod_stanow
ORDER BY ILE_INDEKS
这应该可以工作,但我收到一个错误:
SQL 错误 [335544606] [42000]:动态 SQL 错误;不支持表达式评估;方言3中不能加减字符串【SQLState:42000,ISC错误码:335544606】
我尝试将其转换为更大的 varchar,但仍然没有成功。这里有什么问题?数据库是 Firebird 2.1
【问题讨论】:
-
请提供一个minimal reproducible example,其中包括 DDL、测试数据和要执行的完整查询,该查询会产生错误。乍一看,您的查询对我来说看起来不错,但错误表明您在字符串之间使用
-或+,这似乎不会在显示的代码中发生(除非此查询可能包含在字符串中文字并使用 PSQL 中的EXECUTE STATEMENT执行)。 -
您的问题可能是
'NOW'-100,但我现在无法验证。使用CAST('NOW' as TIMESTAMP) - 100或CURRENT_TIMESTAMP - 100(或转换为DATE或使用CURRENT_DATE如果列DATA_WYKON是DATE)。文字'NOW'本身不是日期/时间戳,只有与日期或时间戳列比较时才会表示,而这里的减法发生在该点之前。 -
CAST('NOW' as TIMESTAMP) - 100 完成了这项工作,谢谢
-
感谢您的确认,我根据我的评论写了一个答案。
标签: sql firebird firebird2.1