楼上的那种写法只是可行,对于大表而言,由于可能无法使用索引,导致效率很低。我的方案:SELECT COUNT(*) FROM A WHERE DT BETWEEN TO_DATE( (SELECT TO_CHAR(MIN(DT),'YYYYMMDD') || '00:00:01' FROM A) ,'YYYYMMDD HH24:MI:SS' ) AND TO_DATE( (SELECT TO_CHAR(MAX(DT),'YYYYMMDD') || '00:00:01' FROM A) ,'YYYYMMDD HH24:MI:SS' ) /楼上的方案:select COUNT(*) from a where to_char(dt,'hh24:mi:ss') between '00:00:01'and '12:00:00'; 我在本地对一个实际的10万条记录的数据表测试, 我的方案执行时间为0.00,楼上的方案执行时间为 0.08当然,前提条件是 dt 上有索引。
楼上的不对啊,MIN(DT)和MAX(DT)之间的所有记录都统计了
select * from t where to_date(time_b,'hh24:mi:ss') >='00:00:01' and to_date(time_b,'hh24:mi:ss') <='12:00:00'
字符串对比能保证对比时间正确吗?
FROM A
WHERE DT
BETWEEN TO_DATE( (SELECT TO_CHAR(MIN(DT),'YYYYMMDD') || '00:00:01' FROM A) ,'YYYYMMDD HH24:MI:SS' )
AND TO_DATE( (SELECT TO_CHAR(MAX(DT),'YYYYMMDD') || '00:00:01' FROM A) ,'YYYYMMDD HH24:MI:SS' )
/楼上的方案:select COUNT(*) from a where to_char(dt,'hh24:mi:ss') between '00:00:01'and '12:00:00';
我在本地对一个实际的10万条记录的数据表测试,
我的方案执行时间为0.00,楼上的方案执行时间为 0.08当然,前提条件是 dt 上有索引。