我正在寻找一种方法来比较SQL查询中的两个日期,其中日期作为整数存储在不同的列中,分别为year
,month
和day
。 (请注意,这不是我的选择!)例如,如果日期是2011年10月12日,则您的值分别为2011
,11
和12
我最初的尝试是以算术方式进行;然而,当我意识到我不知道两个日期中的哪一个会更大时,这种情况就会失败。我试图在SQL中查看日期支持,但遗憾的是我还没有找到任何可以帮助我的东西。我发现了一些方法可以转换为其他版本的日期格式,例如MySQL,但没有任何方法可以用于Oracle的实现。
答案 0 :(得分:3)
假设您的列在表xyz中被称为日,星期一和年份
select to_date(to_char(day)||to_char(mon)||to_char(year),'ddmmyyyy')
from xyz
会将数字转换为日期。然后你可以按照自己的意愿操纵它们。
在回复评论时添加:
排除不能转换为日期的dd mon和yyyy组合的最简单方法可能是在pl / sql中执行to_date,然后使用invalid_date异常处理程序来捕获问题组合。如果你必须使用sql,我想你可以尝试在执行to_date之前排除无效组合,所以像
SELECT to_date(to_char(day)||to_char(mon)||to_char(year),'ddmmyyyy')
FROM xyz
WHERE to_char(day)||to_char(mon) NOT IN ('3002','3102','3104','3106','3109','3111')
AND (to_char(day)||to_char(mon) != '2902'
OR to_char(year) IN (2008,2004,1996,1992,1988,...))
...需要保留与数据一样多的闰年。
答案 1 :(得分:0)
在年份不一定是四位数的情况下,这会起作用吗?
如果您有两个角色年份(1998年为“98”,2002年为“02”),那么您可以使用RR年份格式,这将智能地转换它们。如果两种类型恰好混合在一起,它也将正确处理四位数年份。
的示例:
从双重选择to_date(to_char(02)||' - '|| to_char(12)||' - '|| to_char(30),'RR-MM-DD');
从双重选择to_date(to_char(1998)||' - '|| to_char(12)||' - '|| to_char(30),'RR-MM-DD');