質問

私は

たとえば、SQLクエリで日付で選択する必要があります
SELECT * FROM foo WHERE date = '2009-09-09'

そのクエリは、私の極超音速テストデータベースで動作しますが、ように見えるOracleは、必要としません

SELECT * FROM foo WHERE date = TO_DATE('2009-09-09', 'yyyy-mm-dd')

これらの二つのデータベースにわたって均一日付で選択する方法はありますか?

役に立ちましたか?

解決

私は答えを見つけた - あなたはハイパーソニックでTO_DATE関数を作成することができ、その後、2番目のクエリは、両方で動作します。たとえば、クラスを作成します:

public class Date {
    public static String toDate( String value, String format ) {
        return value;
    }
}

とクエリ

SELECT * FROM foo WHERE date = TO_DATE('2009-09-09', 'yyyy-mm-dd')

の両方で動作します。

他のヒント

// WWW:

あなたは、あなたのインメモリデータベース( の<のhref = "HTTPとしてH2データベースを試みることができます.h2database.com」のrel = "nofollowをnoreferrer"> http://www.h2database.com を)。これは、Oracle compablityモードのnoreferrer">まともなの

HSQLDB 2.0はOracleだけとしてANSI日付リテラルをサポートしています。あなたはHSQLDB 2.0にアップグレードすることができますので、もし、あなたが使用することができます:

SELECT * 
FROM foo 
WHERE date_column = DATE '2009-09-09'

両方のデータベースにある(実際にはもっと多くのデータベースにも)

Oracleで

A「日付= 『リテラル文字列』」述語は、通常は推奨されません - それはNLS_DATE_FORMATの設定に敏感であり、多くの場合、あなたは上記のあなたの例では、結果セット(に探しているものの上に誤解につながるあなたがしたいですか正確に深夜に作成されたものだけで一日のためか、すべてのレコード?)

あなたは両方のデータベースのための均一なクエリ文字列が必要な場合は、

は、Oracleでテーブルの名前を変更し、fooという名前を持つビューを作成し、ビューロジックにVARCHAR2に日付データ型をキャストすることがあります。おそらく、リキャスト値で効率的な検索を可能にするために、テーブルにファンクション索引を追加する必要があります。

あなたは、あなたはOracleのセッションでのNLS_DATE_FORMATを設定することができた場合は、その方法は、あなたがTO_DATE関数を使用する必要はありません

、Oracleは舞台裏であなたのためにこれを行います。

SQL> select value from v$nls_parameters where parameter = 'NLS_DATE_FORMAT';

VALUE
----------------------------------------------------------------
DD/MM/YYYY

SQL> create table nls_date_test ( id number(10) , date_entered date );

Table created.

SQL> insert into nls_date_test values ( 1 , '31/05/2009' );

1 row created.

SQL> insert into nls_date_test values ( 2 , '30/05/2009' );

1 row created.

SQL> select * from nls_date_test where date_entered = '2009-09-09';
select * from nls_date_test where date_entered = '2009-09-09'
                                                  *
ERROR at line 1:
ORA-01861: literal does not match format string


SQL> alter session set nls_date_format = 'YYYY-MM-DD';

Session altered.

SQL> select * from nls_date_test where date_entered = '2009-05-30';

        ID DATE_ENTER
---------- ----------
         2 2009-05-30

SQL> select value from v$nls_parameters where parameter = 'NLS_DATE_FORMAT';

VALUE
----------------------------------------------------------------
YYYY-MM-DD

SQL> 
scroll top