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();
}
在我的数据库表中,我有这样的值:11/12/1990,05/08/2001存储。正则表达式(我仅用于测试目的)应该给我存储的所有内容。
我收到错误:
net.ucanaccess.jdbc.UcanaccessSQLException:意外令牌:REGEXP 要求:)
答案 0 :(得分:1)
UCanAccess使用HSQLDB作为后备数据库,因此我们可以在针对Access数据库的UCanAccess查询中使用HSQLDB的REGEXP_MATCHES()
函数。例如,以下查询查找加拿大邮政编码(例如'A1B 2C3')...
ResultSet rs = stmt.executeQuery(
"SELECT PostalCode FROM Members " +
"WHERE REGEXP_MATCHES(PostalCode, '^[a-zA-Z]\\d[a-zA-Z] \\d[a-zA-Z]\\d$')";
...尽管正如Marco在his answer中指出的那样,UCanAccess还支持Access SQL的LIKE
子句的类似regex的功能,可以用来实现同样的功能。
此外,通过UCanAccess,我们可以使用HSQLDB中的REGEXP_SUBSTRING()
函数实际从基于模式的列中提取文本。以下代码从[TextField]中提取看起来像北美电话号码的第一个子字符串(例如,'416-555-1212'或'403-GOT-BEEF'):
ResultSet rs = stmt.executeQuery(
"SELECT phone " +
"FROM " +
"( " +
"SELECT REGEXP_SUBSTRING(TextField, '\\d{3}-\\w{3}-\\w{4}') AS phone " +
"FROM Table1 " +
") " +
"WHERE phone IS NOT NULL");
答案 1 :(得分:1)
是的,只需使用LIKE运算符:
select * from table1 where COLUMN1 like '^[a-zA-Z]#[a-zA-Z] #[a-zA-Z]#$';
(与在访问权限中一样,您可以使用#
代替\d
。)
我花了很多时间让这个隐藏的功能正常工作。
以下是更多示例:myTest