2012-04-16 15 views
5

To powinno być łatwe, ale mam chwilę. Dlaczego ORDER BY z LIKE sortuje pasujące wyniki jako wyższą niż wartość niezgodna? Aby uzyskać wyniki I oczekiwać muszę mieszać ASC i DESC o tym, co jest poza tym te same dane:Zamów przez: Zwrotu odebrać przed LIKE?

create table foo (name text); 
select name from foo order by name like 'm%' desc, name; 

Odpowiedz

8

"x" jak "m%" ma wartość FALSE; "motocykl" jak "m%" ma wartość PRAWDA; "FALSE" < "TRUE".

+0

_M_ bardzo ważny, dziękuję. – Sam

0

można użyć union W tym celu ...

select name from foo where name like 'm%' 
order by name desc 
union all 
select name from foo where name not like 'm%' 
order by name asc 

to daje wynik, jak na Twój wymóg .. :)


dodany ASC w drugim union select zapytania ... tylko bardziej zrozumiały ... bez tego oświadczenia (ASC) również zapytanie może dać pożądanego rezultatu ..