带有数字通配符的 UCanAccess Select 语句给出了意外的令牌:需要 REGEXP_MATCHES
Posted
技术标签:
【中文标题】带有数字通配符的 UCanAccess Select 语句给出了意外的令牌:需要 REGEXP_MATCHES【英文标题】:UCanAccess Select statement with Numeric Wildcards giving unexpected token: REGEXP_MATCHES required 【发布时间】:2017-08-02 16:01:37 【问题描述】:我有一个访问中的查询,它似乎只适用于 * 通配符,而不适用于 # 通配符。
所以我想排除所有 T[5 位] 在 [Field1] 中的记录之前,我只是使用 T* 我在访问中创建了一个名为 Query 的查询,并将其放在 SQL 设计中
查询1
Select [Field1], [Field2], [Table2].[Field3] from [Table1]
LEFT JOIN [Table1] ON [Table1].[Field1] = [Table2].[Field1]
where [Field1] NOT LIKE "T*"
Java 代码
try(PreparedStatement s = conn.prepareStatement("Select [Field1], [Field2], [Field3] from [Query1] where [Field2]
BETWEEN ? AND ?"))
s.setDate(1,java.sql.Date.valueOf(df.getValue()));
s.setDate(2,java.sql.Date.valueOf(dfEnd.getValue()));
try(ResultSet rs = s.executeQuery()) .... etc etc
这完美无缺。
但是现在,我需要更具体,并使用 T#####
排除 field1 数据所以我尝试更改保存在 Access 中的查询,如下所示:
查询1:
Select [Field1], [Field2], [Table2].[Field3] from [Table1]
LEFT JOIN [Table1] ON [Table1].[Field1] = [Table2].[Field1]
where [Field1] NOT LIKE "T#####"
在 Access 中,这可以很好地提取查询,据我所见,在 Access 中没有问题。
但如果我在 Java 中使用相同的代码,复制并粘贴,我会收到此错误:
UCAExc:::4.0.2 用户缺少权限或找不到对象:QUERY1
我尝试了 Compact 和修复,同样的错误。我将 T##### 改回 T* 并且错误消失了。
所以...我试图通过直接访问表格来解决它,所以在 Java 中我使用了
Java代码:
Select [Field1], [Field2], [Table2].[Field3] from [Table1]
LEFT JOIN [Table1] ON [Table1].[Field1] = [Table2].[Field1]
where [Field1] NOT LIKE \"T####\" AND [Field2] BETWEEN ? AND ?"))
s.setDate(1,java.sql.Date.valueOf(df.getValue()));
s.setDate(2,java.sql.Date.valueOf(dfEnd.getValue()));
try(ResultSet rs = s.executeQuery()) .... etc etc
这一次,我明白了
UCAExc:::4.0.2 意外令牌:需要 REGEXP_MATCHES:
我不确定从这里去哪里。我的问题是它为什么不接受 ## 这是 UCanAccess 问题吗?一个java问题?权限问题?有解决办法吗?
【问题讨论】:
【参考方案1】:我能够重现您的问题。在 UCanAccess 4.0.2 下这有效:
SELECT * FROM Table1 WHERE Field1 LIKE "T#####"
但这失败了:
SELECT * FROM Table1 WHERE Field1 NOT LIKE "T#####"
但是,这种解决方法似乎没问题:
SELECT * FROM Table1 WHERE NOT (Field1 LIKE "T#####")
【讨论】:
以上是关于带有数字通配符的 UCanAccess Select 语句给出了意外的令牌:需要 REGEXP_MATCHES的主要内容,如果未能解决你的问题,请参考以下文章
UCanAccess 无法读取带有“... FROM TableName IN 'FileSpec'”的查询