在 SQL Anywhere 11 中使用名为 "date" 的列进行查询

Query with column called "date" in SQL Anywhere 11

我在 SQL Anywhere 11 DB 上有一个 table,其中一列称为 "date"。我正在使用 jconnect JDBC 驱动程序从我的 Java 代码连接到数据库。我用双引号引用了 "date" 列,如下所示。

SELECT inv."date" FROM DBA.acc_invoicereturn inv

我有 2 个数据库文件,一个是 运行ning SQL Anywhere 11 实例的副本。另一个来自 SQL Anywhere 5 数据库,我将其卸载并重新加载(使用 dbunload)到 SA 11 数据库中。当我第一次 运行 这个查询时,它 运行 没问题。但是,我升级的那个,出现以下错误。

com.sybase.jdbc3.jdbc.SybSQLException: SQL Anywhere Error -131: Syntax error near 'date' on line 4 
    at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
    at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.queryLoop(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.executeQuery(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybPreparedStatement.executeQuery(Unknown Source)

这些数据库是一些商店部署的计费系统的一部分。我认为这与我所做的数据库升级有关,但是,在连接到某些生产实例时我也遇到了同样的错误。

我认为这与 quoted_string 配置设置(我根本没有接触)有关,但我不确定为什么它在第一种情况下有效而不是第二种情况。

非常感谢任何帮助。

此致, Parikshit.

DATE是SQL中的保留字。要么使用引号将其转义(不确定在 SQL Anywhere 中是哪个引号),要么更好:重命名您的列名。 Date 不应是列名。尝试 Billing_Date 或 Entry_Date 或类似的东西。

为了将来参考,这里列出了 SQL 中的保留关键字:https://www.drupal.org/docs/develop/coding-standards/list-of-sql-reserved-words

希望这对您的问题有所帮助!

date 可以通过在 [ ]

中转义来用作列名