使用之间比较日期类型

时间:2013-09-10 16:01:27

标签: sql oracle date-arithmetic

下面是我运行的查询,以获取所有帐户的定位日期不在事务日期和事务日期之间 - 60.当我运行它时,查询返回不正确的行。在调查此问题时,我确保所有日期都是同一时间(它们都定义为date,而不是timestamp)。

修改:我还尝试将日期放在trunc()to_date()中无效。

以下是我收到的日期值:

skip_locate           :22-AUG-13
transaction_date      :30-AUG-13
transaction_date - 60 :01-JUL-13

编辑2:对于那些想知道日期的人,以及他们是否真的来自2013年:

skip_locate           :2013-08-22 00:00:00
transaction_date      :2013-08-30 00:00:00
transaction_date - 60 :2013-07-01 00:00:00

同样在我玩的时候,当我带走NOT中的NOT BETWEEN时,我没有得到任何结果。这是错误的,因为skip_locate实际上是在两个日期之间。

以下是查询:

SELECT DISTINCT rl.complaint_date, 
                  rl.complaint_amt, 
                  rl.date_served1, 
                  rl.date_served2,
                  rl.judgement_date,         
                  rl.skip_locate,                       
                  lcc.bal_range_min, 
                  lcc.bal_range_max, 
                  lcc.cost_range_min, 
                  lcc.cost_range_max, 
                  lcc.court, 
                  ah.ACCOUNT, 
                  ah.transaction_code, 
                  ah.transaction_date,
                  ah.transaction_date - 60 "t - 60",
                  ah.rule_id, 
                  ah.amount, 
                  ah.description,                      
                  r.state, 
                  r.zip_code, 
                  z.county                      
  FROM racctrel r, 
       ziplist z, 
       legal_court_cost lcc, 
       racctlgl rl,
       legal_transaction_review ah
  WHERE substr(r.zip_code,1,5) = z.zip
  AND r.state = lcc.state
  AND REPLACE(lcc.county,' ','') = REPLACE(upper(z.county),' ','')
  AND r.ACCOUNT = rl.ACCOUNT
  AND r.ACCOUNT = ah.ACCOUNT
  AND lcc.transaction_code = ah.transaction_code
  AND lcc.transaction_code in (2,31)
  AND lcc.end_date IS NULL
  AND ah.batch_id = 257
  and rl.skip_locate not between ah.transaction_date and ah.transaction_date - 60;

1 个答案:

答案 0 :(得分:1)

在BETWEEN谓词中,您将最早的值放在第一位,最后放置一秒,所以代码应为:

... BETWEEN ah.transaction_date - 60 and ah.transaction_date

如果你有两个约会并且不确定哪个是最早的,哪个是最新的,你会:

... BETWEEN Least(date_1, date_2) and Greatest(date_1, date_2)