我正在使用Oracle数据库。
是否可以将MIN
应用于日期字段,如下所示:
MIN(TO_DATE(Person.birthday, 'DD-Mon-YY'))
答案 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
如何是有效的列名。有谁可以启发我这个?