带有数字通配符的 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#####")
我有一个访问查询似乎只适用于 * 通配符而不适用于 # 通配符。
所以我想排除 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#####")