ORACLE DB 的學習者們

2017年7月11日 星期二

資料查詢中,關於日期欄位到底怎麼查詢?

如果有表格中某欄位的屬性是日期(DATE)型態,該如何查詢 ? 例如,員工到職日,可否使用下列指令查詢?

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

前例中,第二個日期的字串,與格式字串相符,所以能查詢到。第一個的格式不符,因此不行。