Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle подреждане на резултатите с помощта на смесена колона varchar, но числова клауза where

ORDER BY няма нищо общо с проблема -- поне не директно.

SQL като цяло и Oracle в частност не дават обещания относно реда на оценка на условията в WHERE клауза. Следователно, WHERE клаузата не се оценява (непременно) в реда, в който е написана. Наличието на ORDER BY може да повлияе на реда на оценка на условията в този конкретен случай.

Като цяло е наистина лоша практика да се смесват типове данни по начина, по който го правите. Но можете да гарантирате реда на оценяване, като използвате case :

select *
from   TABLE
where  CLASS = 3 
       'true' = (case when class <> 3 then 'false'
                      when (CODE >= 210 and CODE < 220) or CODE = 291) then 'true'
                 end);

Не препоръчвам да правите това. Искам само да посоча този case налага реда на оценяване на условията.

Правилното решение е да използвате сравнения на низове. В този случай бих използвал:

select *
from   TABLE
where  CLASS = 3 AND
       CODE in ('210', '211', '212', '213', '214', '215', '216', '217', '218', '219', '291')

Като алтернатива можете да направите:

where  CLASS = 3 and length(CODE) = 3 and
       ((CODE >= '210' and CODE < '220') or CODE = '291')

Имайте предвид, че за точност трябва да вземете предвид дължината.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Външни таблици на Oracle

  2. Как да промените таблицата за добавяне на колона оракул

  3. Как да разберете номер на ред, име на процедура в PL/SQL в случай на грешка

  4. Oracle PLS-00363:изразът '' не може да се използва като цел за присвояване

  5. Извършване на вътрешно свързване за множество колони в една и съща таблица