【问题标题】:Regular Expression matching when querying an Access database with UCanAccess使用 UCanAccess 查询 Access 数据库时的正则表达式匹配
【发布时间】:2015-04-11 22:23:05
【问题描述】:
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 必填:)

【问题讨论】:

  • 我认为 MS Access 不支持 regexp 作为运算符。

标签: java sql regex ms-access ucanaccess


【解决方案1】:

是的,只需使用 LIKE 运算符:

select * from table1 where COLUMN1 like '^[a-zA-Z]#[a-zA-Z] #[a-zA-Z]#$';

(与 Access 中一样,您可以使用 # 代替 \d。)

我花了很多时间来让这个隐藏的功能发挥作用。

这里有更多示例:myTest

【讨论】:

    【解决方案2】:

    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 子句的类似正则表达式的功能,可以用来完成同样的事情。

    此外,借助 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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 2011-09-26
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多