当我连接到Firebird数据库并尝试执行查询时,它会向我抛出以下错误:
"Error while preparing SQL statement:")
fdb.fbcore.DatabaseError: ('Error while preparing SQL statement:\n- SQLCODE: -104\n- Dynamic SQL Error\n- SQL error code = -104\n- Token unknown - line 27, column 113\n- )', -104, 335544569)
我的查询如下:
^{pr2}$我查过错误的原因是:
trunc(('today' - pac.BIRTH_DATE)/365.25) as AGE
如果我从查询中删除它,它就可以完美地工作了。有人知道为什么吗?你能帮帮我吗?在
我做了艾恩告诉我的事:
trunc((cast(CURRENT_DATE - pac.BIRTH_DATE) as DOUBLE PRECISION)/365.25) as AGE
"Error while preparing SQL statement:")
fdb.fbcore.DatabaseError: ('Error while preparing SQL statement:\n- SQLCODE: -104\n- Dynamic SQL Error\n- SQL error code = -104\n- Database SQL dialect 1 does not support reference to DATE datatype', -104, 335544569)
但这会导致同样的错误。如果我尝试:
DATEDIFF(YEAR from CURRENT_DATE to pac.BIRTH_DATE) as AGE
"Error while preparing SQL statement:")
fdb.fbcore.DatabaseError: (
'Error while preparing SQL statement:\n-
SQLCODE: -104\n-
Dynamic SQL Error\n-
SQL error code = -104\n-
Database SQL dialect 1 does not support reference to DATE datatype',
-104, 335544569)
最后,我通过以下方式解决了这个问题:
... trunc(DATEDIFF(DAY from cast(pac.BIRTH_DATE as DATE) to CURRENT_TIMESTAMP)/365.25) as AGE ...
我也来看看方言。非常感谢你的帮助!在
你不应该用方言1。2000年,随着Interbase6和Firebird 0.9的发布,它被淘汰了。它的唯一目的是与2000年以前的数据库服务器版本向后兼容,用于2000年以前的遗留应用程序。在2018年,这个目的几乎没有实际价值,因此方言1不仅阻止您使用最新的语言和引擎增强功能,而且可能是由于几乎没有真实世界的暴露,因此很少进行外部测试。在
你必须把你的数据库迁移到方言3。在迁移过程中,检查并消除数据库创建者可能引入的所有不兼容项,使用2000年以前的语言对其进行编码。在
您必须将
'today'
转换为最新值,否则它只是一个字符串文本。Ie使用您可能还想使用
CURRENT_DATE
,请参阅Firebird手册的Context variables主题。在您似乎希望以“全年”为单位计算年龄,因此可以使用
^{pr2}$DATEDIFF
函数进行计算:相关问题 更多 >
编程相关推荐