2014-12-22 46 views
4

我有這樣甲骨文:年份必須-4713和+9999之間,而不是0

|---------------------------------| 
|EMPNO | HIREDATE | INDEX_NUM | 
|---------------------------------| 
|1  | 2012-11-13 | 1   | 
|2  | 2   | 1   | 
|3  | 2012-11-17 | 1   | 
|4  | 2012-11-21 | 1   | 
|5  | 2012-11-24 | 1   | 
|6  | 2013-11-27 | 1   | 
|7  | 2   | 2   | 
|---------------------------------| 

Oracle表我想對這個表

SELECT hiredate 
    FROM admin_emp 
    WHERE TO_DATE('hiredate','yyyy-mm-dd') >= TO_DATE('2012-05-12','yyyy-mm-dd'); 

執行此query但得到錯誤

ORA-01841: (full) year must be between -4713 and +9999, and not be 0 

任何想法..?這裏有什麼問題?

查詢的基礎:在SQL分別表示字符串文字

CREATE TABLE admin_emp (
     empno  NUMBER(5) PRIMARY KEY, 
     hiredate VARCHAR(255), 
     index_num NUMBER(5)); 


insert into admin_emp(empno,hiredate,index_num) values 
(1,'2012-11-13',1); 
insert into admin_emp(empno,hiredate,index_num) values 
(2,'2',1); 
insert into admin_emp(empno,hiredate,index_num) values 
(3,'2012-11-17',1); 
insert into admin_emp(empno,hiredate,index_num) values 
(4,'2012-11-21',1); 
insert into admin_emp(empno,hiredate,index_num) values 
(5,'2012-11-24',1); 
insert into admin_emp(empno,hiredate,index_num) values 
(6,'2013-11-27',1); 
insert into admin_emp(empno,hiredate,index_num) values 
(7,'2',2); 

回答

3

單引號(')。因此'hiredate'不是hiredate列,它只是一個varchar,當然,它不適合您指定的日期格式。剛落引號,你應該罰款:

SELECT hiredate 
FROM admin_emp 
WHERE TO_DATE(hiredate,'yyyy-mm-dd') >= -- No quotes 
     TO_DATE('2012-05-12','yyyy-mm-dd'); 
+0

對不起......不同的錯誤..'ORA-01840:輸入值不夠長日期格式',讓我試試 –

+3

某些行只具有''2'爲'hiredate'。它應該如何解釋?強烈建議您重新設計您的表格,並使用'DATE'作爲'hiredate'類型。爲你節省很多麻煩 –

+3

你上一次'insert'語句,'insert into admin_emp(empno,hiredate,index_num)values (7,'2',2);'在'hiredate'中有一個非法值 - 你應該去掉它。順便說一句,將這一列定義爲「日期」預計可能是一個更好的主意,並節省了所有這些麻煩。 – Mureinik