select * from employees where hire_date='2005/9/21'; <錯>
select * from employees where hire_date='21-SEP-2005'; <錯>
select * from employees where hire_date=to_date('2005/9/21','YYYY/MM/DD'); <對>
上例是直接透過EXPLICIT的轉換函數將日期字串轉換為日期型態。
select * from employees where hire_date=to_date('21-SEP-2005','DD-MM-YYYY'); <錯>
這次會錯又是因為 NLS_DATE_LANGUAGE 在中文環境底下,被改為繁體中文
select * from v$nls_parameters
NLS_LANGUAGE TRADITIONAL CHINESE
alter session set nls_date_language='american';
修改完畢以後,如果使用字元LITERAL查詢日期可以嗎? 又回到剛才第一個方式查詢 select * from employees where hire_date='2005/9/21'; <錯>
select * from employees where hire_date='21-SEP-2005'; <對>
為何不一樣 ? 結論是,看參數設定 NLS_DATE_FORMAT
NLS_DATE_FORMAT DD-MON-RR
前例中,第二個日期的字串,與格式字串相符,所以能查詢到。第一個的格式不符,因此不行。