1

PL-SQLでクエリを実行しました。現在との日付の差が1日以上で、その他の条件があるレコードを選択したい...

select round(sysdate - u.RecordDate) as deleteme,
       round(sysdate - u.Payment_date) as payment,
       nvl(isverified, 0) as Verified

  from user_cards u

 where ((round(sysdate - u.RecordDate) > 0) || (round(sysdate - u.Payment_date) > 0))
   and nvl(isverified, 0) = 0
 order by id desc


しかし、ここに問題があります where ((round(sysdate - u.RecordDate) > 0) || (round(sysdate - u.Payment_date) > 0))

日付の違いが1日を超える場合、どのようなアイデアでレコードを取得できますか?

4

2 に答える 2

2

日付の差が 1 日を超えるレコードを取得するには、日付を減算して 1 より大きいかどうかをテストするだけで十分です。

sysdate - u.RecordDate > 1

あなたのコードのために:

sysdate - u.RecordDate > 1 OR sysdate - u.Payment_date > 1

詳細: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i48042

于 2012-12-14T14:49:54.120 に答える
0

この「X日と今日の差はY日以上」という言い回しは本当に好きじゃないんですけど… 人は本当にそう言うのでしょうか?通常、日付 X は Y 日以上前だと思いませんか?

とにかく、インデックスを使用できるようにするには、次のようにします。

u.RecordDate < sysdate-1 OR u.Payment_date < sysdate-1

これが通常のジョブである場合、次の述語を支援する単一の列関数ベースのインデックスによってサポートされる可能性があります。

Least(u.RecordDate,u.Payment_date) < sysdate-1
于 2012-12-15T21:35:08.957 に答える