1

私はこれを介してSQLクエリを持っています私は05:00:00 PM前後 のレコードを計算したいです。ここで私は私の05:00:00 PMクエリですが、これを通して私は間違った結果を得ていますこれに論理エラーがある場合は誰かがこれをチェックしてください

Select trunc(gross_weight_date) date1,
count(*) before5 
from wbg.WBG_01_01
where to_char(gross_weight_date,'HH:MI:SS PM')>'05:00:00 PM'
and item_cod = 16
and trunc(gross_weight_date)='05-JAN-2012' 
group by trunc(gross_weight_date)
order by date1

どんな助けでも感謝するかもしれません

4

2 に答える 2

3

chars日付の比較に使用しています。それは正しく機能しません。


午後5時以降にのみ比較したいので、次の簡単な解決策があります。

Select trunc(gross_weight_date) date1,
count(*) before5 
from wbg.WBG_01_01
where to_number(to_char(gross_weight_date, 'HH24MISS')) > 150000
and item_cod = 16
and trunc(gross_weight_date)='05-JAN-2012' 
group by trunc(gross_weight_date)
order by date1

日付の値を文字( '171212')に渡し、次に数値(171212)に渡し、150000と比較します。

于 2012-06-20T09:22:01.020 に答える
3
  1. 文字は数字と同じ順序でソートされていないため、VARCHAR2を使用して日付を比較しないでください(「12」は「5」の前にあります)。
  2. リンゴとオレンジを比較しないでください(はVARCHAR2trunc(gross_weight_date)の日付です)。'05-JAN-2012'

日付を操作する場合、変換に頼らずに日付関数と日付演算を使用できます。次に例を示します。

Select trunc(gross_weight_date) date1, count(*) before5 
  from wbg.WBG_01_01
 where item_cod = 16
   and gross_weight_date > to_date('05-01-2012', 'DD-MM-YYYY') + 17/24 
   and gross_weight_date < to_date('05-01-2012', 'DD-MM-YYYY') + 1 
 group by trunc(gross_weight_date)
 order by date1

また

Select trunc(gross_weight_date) date1, count(*) before5 
  from wbg.WBG_01_01
 where item_cod = 16
   and gross_weight_date > to_date('05-01-2012', 'DD-MM-YYYY') 
                           + numtodsinterval(17, 'HOUR') 
   and gross_weight_date < to_date('05-01-2012', 'DD-MM-YYYY')
                           + numtodsinterval(1, 'DAY')
 group by trunc(gross_weight_date)
 order by date1
于 2012-06-20T09:31:51.640 に答える