带有数字通配符的 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'”的查询

带有 UCanAccess 的 java.util.regex.PatternSyntaxException

Linq Like

使用 VBA 解析和拆分带有通配符的字符串?

UCanAccess:来自空间的意外令牌

第二个 Ucanaccess 事务并不总是被推送到 MDB