我需要按日期在SQL查詢來選擇,例如甲骨文主場迎戰超音速SQL
SELECT * FROM foo WHERE date = '2009-09-09'
該查詢工作在我的高超聲速試驗數據庫,而不是甲骨文,這似乎需要:
SELECT * FROM foo WHERE date = TO_DATE('2009-09-09', 'yyyy-mm-dd')
有沒有一種方法可以在這兩個數據庫中統一選擇日期?
我需要按日期在SQL查詢來選擇,例如甲骨文主場迎戰超音速SQL
SELECT * FROM foo WHERE date = '2009-09-09'
該查詢工作在我的高超聲速試驗數據庫,而不是甲骨文,這似乎需要:
SELECT * FROM foo WHERE date = TO_DATE('2009-09-09', 'yyyy-mm-dd')
有沒有一種方法可以在這兩個數據庫中統一選擇日期?
我找到了答案 - 你可以在HyperSonic中創建TO_DATE函數,然後第二個查詢在兩者中都起作用。例如,使課堂:
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')
工作在兩種。
您可以嘗試H2數據庫作爲您的內存數據庫(http://www.h2database.com)。它應該有體面的Oracle compablity mode。
通常不建議在Oracle中使用「date ='literal string'」謂詞 - 它對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>
HSQLDB 2.0像Oracle一樣支持ANSI日期文字。所以,如果你可以升級到2.0 HSQLDB,你可以使用:
SELECT * FROM foo WHERE date_column = DATE '2009-09-09'
兩個數據庫(其實很多多個數據庫偶數)