Java 使用UCanAccess查询Access数据库时的正则表达式匹配
在我数据库的表中,我存储了如下值:11/12/1990、05/08/2001。我只是出于测试目的而使用的常规表达式应该会提供存储的所有内容 我得到的错误是: net.ucanaccess.jdbc.UcanaccessSQLException:意外标记:REGEXP 所需:Java 使用UCanAccess查询Access数据库时的正则表达式匹配,java,sql,regex,ms-access,ucanaccess,Java,Sql,Regex,Ms Access,Ucanaccess,在我数据库的表中,我存储了如下值:11/12/1990、05/08/2001。我只是出于测试目的而使用的常规表达式应该会提供存储的所有内容 我得到的错误是: net.ucanaccess.jdbc.UcanaccessSQLException:意外标记:REGEXP 所需: UCanAccess使用HSQLDB作为后台数据库,因此我们可以在UCanAccess查询Access数据库时使用HSQLDB的REGEXP_MATCHES函数。例如,以下查询查找加拿大邮政编码,例如“A1B 2C3” 结果
UCanAccess使用HSQLDB作为后台数据库,因此我们可以在UCanAccess查询Access数据库时使用HSQLDB的REGEXP_MATCHES函数。例如,以下查询查找加拿大邮政编码,例如“A1B 2C3” 结果集rs=stmt.executeQuery 从成员中选择PostalCode+ 其中REGEXP_匹配statalcode,“^[a-zA-Z]\\d[a-zA-Z]\\d[a-zA-Z]\\d$”; 。。。尽管如此,正如Marco在中指出的,UCanAccess还支持Access SQL的like子句的类似正则表达式的特性,这些特性可以用来完成同样的任务 此外,使用UCanAccess,我们可以使用HSQLDB中的REGEXP_SUBSTRING函数根据模式从列中实际提取文本。以下代码从[TextField]中提取第一个子串,该子串看起来像北美电话号码,例如“416-555-1212”或“403-GOT-BEEF”: 结果集rs=stmt.executeQuery 选择电话+ 从+ + 选择REGEXP_SUBSTRINGTextField,'\\d{3}-\\w{3}-\\w{4}'作为电话+ 来自表1+ + 电话不为空;
是的,只需使用LIKE运算符: 从表1中选择*,其中列1类似于“^[a-zA-Z][a-zA-Z][a-zA-Z]$”; 与Access中一样,您可以使用而不是\d 我花了很多时间让这个隐藏的功能正常工作
这里有更多的例子:我认为MS Access不支持将regexp作为一个操作符。
public TestDate()
{
fnDbConnect();
try
{
String sql = "SELECT ledate FROM tblTestDate WHERE (ledate REGEXP '^..........$')";
resultSet = st.executeQuery(sql);
while (resultSet.next())
{
String strr = resultSet.getString("ledate");
System.out.println("strr: " + resultSet.getString("ledate"));
}
System.out.println("After");
}
catch(SQLException sqlException)
{
sqlException.printStackTrace();
System.exit(1);
}
fnDbClose();
}