MIN在日期字段上

时间:2016-05-09 07:06:03

标签: sql oracle date

我正在使用Oracle数据库。

是否可以将MIN应用于日期字段,如下所示:

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

1 个答案:

答案 0 :(得分:4)

这是一个简单的问题,但它有一个捕获。

是否可以将 MIN 应用于日期列?

  • 是的,你可以。

这是正确的方法 MIN(TO_DATE(Person.birthday, 'DD-Mon-YY'))吗?

  • 否。您应该使用MIN(Person.birthday)如果列已经存在 DATE类型,您不应该使用TO_DATE将其再次转换为 ORACLE隐式转换它。

以下是一个例子 -

数据 -

+-------+--------+-----------+------+-------------+------+------+--------+
| 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年(千年虫)问题出现时创建的。但是,我仍然不建议去做。

编辑1:

我不确定Person.birthday如何是有效的列名。有谁可以启发我这个?