2016-05-09 8 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'))?カラムがすでに DATEタイプであればあなたはMIN(Person.birthday)を使用する必要があります

  • いいえ、あなたはORACLEは、暗黙的に変換し として再びそれを変換するTO_DATEを使用しないでください。

は、ここでの例だ理由 -

データ -

+-------+--------+-----------+------+-------------+------+------+--------+ 
| 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 | 
+-------+--------+-----------+------+-------------+------+------+--------+ 

QUERY 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 

あなたは、あなたがしかし、QUERY 1にTO_DATE機能を使用する場合世紀を台無しにされた結果を見ることができるようにQUERY 2で期待通りです。

場合必ずしもTO_DATE機能を使用する必要があり、私はお勧めし それは世紀 不一致の世話をするようあなたがDD-Mon-RRの形式を使用します。 この形式は、年Y2K(Millenniumバグ)の問題がになったときに作成されました。しかし、私はまだそれをお勧めしません。

EDIT 1:

私はPerson.birthdayが有効な列名であるかどうかはわかりませんよ。誰かがこれについて私を啓発することはできますか?

+0

'to_date()'の使い方は、無効なデータを返すと、エラーが発生する可能性があります。 NLS_DATE_FORMATは** DDではないため、MIN(TO_DATE(hd)、DD-Mon-YY))を使用すると、私のコンピュータ上では、* ORA-01843: MON-YY ' –

+0

@a_horse_with_no_nameもっと同意できませんでした。 'TO_DATE'は' DATE'カラムのためのものではありません。文字列を日付に変換するために作成されました。 –

+0

...から人

関連する問題