2016-05-09 104 views
0

我正在使用Oracle數據庫。MIN在日期字段上

是否有可能一個MIN申請日期字段,如下所示:

MIN(TO_DATE(Person.birthday, 'DD-Mon-YY')) 
+6

當然,你爲什麼不簡單嘗試呢? – dnoeth

+0

如果它已經是日期字段,只需使用'MIN(person.birthday)' –

+1

列,而不是字段... – jarlh

回答

4

這是一個簡單的問題,但有一個捕捉到它。

是否可以申請MIN到目前爲止的專欄?

  • 是的,你可以。

這是正確的方法MIN(TO_DATE(Person.birthday, 'DD-Mon-YY'))

  • 號,您應該使用MIN(Person.birthday)如果列已經是 DATE類型,你不應該使用TO_DATE作爲 ORACLE隱式轉換它再次轉換。

下面是一個例子,爲什麼 -

DATA -

+-------+--------+-----------+------+-------------+------+------+--------+ 
| EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | 
+-------+--------+-----------+------+-------------+------+------+--------+ 
| 7369 | SMITH | CLERK  | 7902 | 17/Dec/1980 | 800 |  |  20 | 
| 7499 | ALLEN | SALESMAN | 7698 | 20/Feb/1981 | 1600 | 300 |  30 | 
| 7521 | WARD | SALESMAN | 7698 | 22/Feb/1981 | 1250 | 500 |  30 | 
+-------+--------+-----------+------+-------------+------+------+--------+ 

查詢1

select MIN(TO_DATE(hiredate, 'DD-Mon-YY')) from emp; 

結果1

17/12/2080 

QUERY 2

select MIN(hiredate) from emp; 

結果2

17/12/1980 

正如你可以看到世紀搞砸了,當你在查詢1.使用TO_DATE功能然而結果與QUERY 2中的預期相同

如果一定必須使用TO_DATE功能,我建議你 使用DD-Mon-RR格式,因爲它需要的世紀 不匹配的照顧。 這個格式是在Y2K年的問題(Millennium錯誤)出現時創建的。不過,我仍然不會建議去做。

編輯1:

我不知道如何Person.birthday是一個有效的列名。任何人都可以啓發我嗎?

+0

to_date()的錯誤用法可能不僅僅是返回無效數據,也可能導致錯誤。在我的電腦上,當使用'MIN(TO_DATE(hiredate,'DD-Mon-YY'))'時,我得到了「* ORA-01843:不是有效的月份*」,因爲我的'NLS_DATE_FORMAT'是**不** ** DD- MON-YY' –

+0

@a_horse_with_no_name我完全同意。 'TO_DATE'只是不適用於'DATE'列。它是爲了將字符串轉換爲日期而創建的。 –

+0

...來自人