【问题标题】:SQL Query with between two dates showing even those not between两个日期之间的 SQL 查询甚至显示那些不在之间的日期
【发布时间】:2016-09-01 06:02:10
【问题描述】:
select ktl.id, kth.trans_dte, kth.trtype, kp.match_code,ktl.net_amount,ktl.gross_amount,ktl.db_portfolio_type,ktl.cr_portfolio_type from k$transaction_lines ktl 
    left join k$transaction_header kth on ktl.id=kth.id 
    left join k$portfolio kp on kp.id = (CASE WHEN ktl.db_portfolio_type = 'C' THEN ktl.db_portfolio ELSE ktl.cr_portfolio END) 
    where to_char(kth.trans_dte,'DD-MON-YY') >= '22-AUG-16' 
    and to_char(kth.trans_dte,'DD-MON-YY') <= '27-AUG-16'
    and ktl.db_portfolio_type <> 'I' 
    and ktl.cr_portfolio is not null 
    order by  kth.trans_dte, ktl.id, kp.match_code, kth.trtype

这是我的查询。我只想知道我的 where 子句 kth.trans_dte 是否有问题。 我只想获得从 8 月 22 日到 8 月 27 日的交易,但我在该日期之前获得交易,2 月和 3 月不应该包含在内。我想知道为什么..我的代码有问题还是我不​​知道的数据库有问题。谢谢!

【问题讨论】:

  • to_char(kth.trans_dte,'DD-MON-YY') &gt;= '22-AUG-16' 应该是:kth.trans_dte >= to_date('22-AUG-16' , 'DD-MON-YYY')` 或者更好(更强大):th.trans_dte &gt;= to_date('2016-08-22 , 'YYYY-MM-DD')。不要将日期作为字符串进行比较,将它们作为日期进行比较

标签: sql oracle date between


【解决方案1】:

您使用to_char 将您的字段转换为char,然后尝试按日期进行比较。 to_char 完全按照它所说的去做 - 转换为 char 字符串,因此您将根据字符串的 ascii 表示形式获取日期

尝试使用 to_date - 在条件的两侧

【讨论】:

  • 是的,我们同时解决了 :) 谢谢!呵呵呵呵
【解决方案2】:

尝试使用 BETWEEN 而不是 2 个条件。

【讨论】:

    【解决方案3】:
    select ktl.id, kth.trans_dte, kth.trtype, kp.match_code,ktl.net_amount,ktl.gross_amount,ktl.db_portfolio_type,ktl.cr_portfolio_type from k$transaction_lines ktl 
        left join k$transaction_header kth on ktl.id=kth.id 
        left join k$portfolio kp on kp.id = (CASE WHEN ktl.db_portfolio_type = 'C' THEN ktl.db_portfolio ELSE ktl.cr_portfolio END) 
        where (to_char(kth.trans_dte,'DD-MON-YY') >= '22-AUG-16' 
        and to_char(kth.trans_dte,'DD-MON-YY') <= '27-AUG-16')
        and ktl.db_portfolio_type <> 'I' 
        and ktl.cr_portfolio is not null 
        order by  kth.trans_dte, ktl.id, kp.match_code, kth.trtype
    

    试试这个。

    【讨论】:

      【解决方案4】:

      尝试在Query like中使用between关键字和to_date函数

      where kth.trans_dte between to_date('22-AUG-16') 
      and to_date('27-AUG-16')
      and ktl.db_portfolio_type <> 'I' 
      and ktl.cr_portfolio is not null 
      order by  kth.trans_dte, ktl.id, kp.match_code, kth.trtype
      

      【讨论】:

        【解决方案5】:

        对不起,我刚刚解决了。在执行该条件时我不能使用 to_char,这就是它给出错误结果的原因。

        【讨论】:

          猜你喜欢
          • 2018-07-25
          • 2010-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-29
          • 2011-07-04
          相关资源
          最近更新 更多