sql - 将两个日期作为整数进行比较,Oracle SQL

标签 sql oracle

我正在寻找一种方法来比较 SQL 查询中的两个日期,其中日期作为整数存储在单独的列中,如 year , month ,和day 。 (请注意,这不是我的选择!)例如,如果日期是 2011 年 10 月 12 日,则您的值为 2011 , 11 ,和12 ,分别。

我最初的尝试是通过算术来完成;然而,当我意识到我不知道这两个日期中哪一个更大时,这个计划就失败了。我尝试研究 SQL 中的日期支持,但不幸的是我还没有真正找到任何可以帮助我的东西。我找到了一些转换为其他版本(例如 MySQL)中的日期格式的方法,但没有找到适合 Oracle 实现的方法。

最佳答案

假设您的列在表 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,...))

...需要保存与您的数据一样多的闰年。

关于sql - 将两个日期作为整数进行比较,Oracle SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746063/

相关文章:

oracle - 如何从查询中的多行中获取一行并连接另一个表?

sql - 如何在搜索中避免 & 和 %

java - 如何在Java中使用准备好的语句和StringBuffer返回row_number

mysql - 如何正确使用右连接

sql - 如何只显示前两行?

oracle - plsql中的增量函数

java - ORA-06553 Oracle 中带有 Blob 的 java 函数参数错误

sql - 'OOP languages are organized around graphs' 是什么意思?

mysql - 如何为下面的脚本实现 Join 以避免嵌套脚本

sql - 是否可以向外键添加逻辑约束?