2
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 が必要です: )

4

2 に答える 2

2

ええ、単純に LIKE 演算子を使用します。

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

#(Access と同様に、の代わりに使用できます\d。)

この隠れた機能を機能させるために、私は多くの時間を費やしました。

その他の例を次に示します

于 2015-04-12T13:32:01.793 に答える
1

UCanAccess は HSQLDB をバッキング データベースとして使用するためREGEXP_MATCHES()、Access データベースに対する UCanAccess クエリで HSQLDB の機能を使用できます。たとえば、次のクエリはカナダの郵便番号を検索します (例: '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$')";

... ただし、マルコが彼の回答で指摘しているように、UCanAccessLIKEは、同じことを達成するために使用できる句の Access SQL の正規表現のような機能もサポートしています。

さらに、UCanAccess を使用するとREGEXP_SUBSTRING()、HSQLDB の関数を使用して、パターンに基づいて列から実際にテキストを抽出できます。次のコードは、北米の電話番号のように見える [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");
于 2015-04-12T11:14:06.990 に答える