UCanAccess选择语句与数字通配符给予意想不到的令牌:需要REGEXP_MATCHES
问题描述:
我有一个查询访问,似乎只适用于*通配符,但不是#通配符。UCanAccess选择语句与数字通配符给予意想不到的令牌:需要REGEXP_MATCHES
所以我想排除其中T [5位]是[字段1]之前的所有记录,我只是用T *我创建了一个名为查询访问查询,并把这个在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}
这项工作非常完美。
但是现在,我需要更加具体,并与牛逼#####
于是,我就改变我的查询保存在我的访问,像这样排除field1的数据:
查询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中我用
Javacode:
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#####")
谢谢你这个工作对我来说 – arsarc