【问题标题】:Date comparison in Oracle databaseOracle数据库中的日期比较
【发布时间】:2010-05-26 11:05:24
【问题描述】:

我有两个变量 TO_DATEFROM_DATE。我的表有两个字段DOJDOL。我想选择DOJ < TO_DATE and DOL > FROM_DATE所在的所有记录。

如何为此编写 SQL 查询?

【问题讨论】:

    标签: oracle date plsql


    【解决方案1】:

    您可能会在使用名为 to_date 的变量时遇到问题,因为这是一个内置的 Oracle 命令。您可以在使用变量的任何地方使用双引号来解决这个问题,如下所示:

    SELECT * FROM my_table WHERE doj < "to_date" AND dol > from_date;
    

    【讨论】:

    • 是的,重要的是要避免与 TO_DATE 内置 Oracle 函数混淆,很好的考虑 ;-)
    【解决方案2】:

    不清楚你想做什么。

    第一解释

    我想选择 DOJ FROM_DATE 的所有记录。

    SELECT *
      FROM MY_TABLE
     WHERE DOJ < "TO_DATE" AND DOL > "FROM_DATE"; -- using double quotes in order to
                                                  -- avoid confusion with TO_DATE
                                                  -- built-in function with the same name.
                                                  -- Thanks to kicsit ;-)
    

    二次解释

    我想选择 DOJ FROM_DATE 的所有记录。

    SELECT *
      FROM MY_TABLE
     WHERE DOJ < "TO_DATE"
    UNION -- UNION ALL substituted with UNION, thanks to kicsit user ;-)
    SELECT *
      FROM MY_TABLE
     WHERE DOL > "FROM_DATE";
    

    ... 或 - 相同:

    SELECT * 
      FROM MY_TABLE 
     WHERE DOJ < "TO_DATE" OR DOL > "FROM_DATE";
    

    【讨论】:

    • “第二解释”中的两个查询不会产生相同的结果,因为 UNION ALL 将产生满足这两个条件的所有行的重复。
    • 你是对的! ;-) 我用“UNION”替换了“UNION ALL”,它删除了重复项 ;-)
    猜你喜欢
    • 2021-05-28
    • 1970-01-01
    • 2020-10-28
    • 2012-02-08
    • 1970-01-01
    • 2021-11-05
    • 2012-02-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多