带有数字通配符的 UCanAccess Select 语句提供意外标记:需要 REGEXP_MATCHES

UCanAccess Select statement with Numeric Wildcards giving unexpected token: REGEXP_MATCHES required

我有一个访问查询似乎只适用于 * 通配符而不适用于 # 通配符。

所以我想排除 T[5 digits] 在 [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 user lacks privilege or object not found: QUERY1

我试过压缩和修复,同样的错误。我将 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 unexpected token: REGEXP_MATCHES required:

我不确定从这里到哪里去。我的问题是为什么它不接受 ## 这是 UCanAccess 问题吗? java 问题?权限问题?有解决方法吗?

我能够重现您的问题。在 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#####")