sql >> Databáze >  >> RDS >> Oracle

SQL Dynamic ASC a DESC

Můžete dělat řešení jako @TonyAndrews manipulací s číselnými nebo datovými hodnotami. Pro VARCHAR2 alternativou k dynamickému SQL by mohly být dva výrazy:

order by
   case when :sorting='ASC' then col1 end ASC,
   case when :sorting='DESC' then col1 end DESC

Když :sorting má hodnotu 'ASC' výsledek tohoto ORDER BY se stane, jako kdyby to bylo:

order by
   col1 ASC,
   NULL DESC

Když :sorting má hodnotu 'DESC' výsledek tohoto ORDER BY se stane, jako kdyby to bylo:

order by
   NULL ASC,
   col1 DESC

Jednou nevýhodou této metody je, že případy, kdy optimalizátor může přeskočit operaci SORT, protože se jedná o index, díky kterému jsou data již roztříděna podle potřeby, se při použití metody CASE, jako je tato, nestane. Bez ohledu na to to nařídí operaci řazení.



  1. Zkopírujte data z jednoho pole do druhého na každém řádku

  2. PHP vložení PDO pomocí smyčky

  3. php:relace vs. databáze

  4. Jak volat uloženou proceduru s Eloquent (Laravel)?