Как я могу выполнить SQL ORDER BY экспозиции, фокус и iso (в числовом, а не в строке) - PullRequest
1 голос
/ 30 сентября 2011

Столбцы для Экспозиция, Фокус и Изо не сортируются должным образом. Кажется, что все они интерпретируются как строки и сортируются как таковые. Например, если я сортирую Экспозицию вниз, значения могут выглядеть следующим образом:

1/800, 1/800, 1/800, 1/80, 1/675, 1/640, 1/60, 1/500

Если я сортирую Focal, это может выглядеть так:

1,4, 1,4, 1,4, 14,0, 14,0, 1,3, 13,0, 1,2, 1,2, 12,0, 1,0, 10,0

и если я сортирую по ISO, это может выглядеть так:

800, 800, 800, 80, 80, 640, 640, 60, 500, 500, 50

РЕДАКТИРОВАТЬ: Мой другой вопрос (и ответы) для выполнения всего этого в одном SQL-запрос.

1 Ответ

2 голосов
/ 30 сентября 2011

Я проверял это на Oracle

with 
   w_data AS(
      select '1/800' exposure from dual union all
      select '1/80'  from dual union all
      select '1/675' from dual union all
      select '1/640' from dual union all
      select '1/500' from dual 
   )
select *
  from w_data
 order by 1 / to_number(substr(exposure, 3, length(exposure)))   

Для фокуса вы делаете ORDER BY to_number(focal) и то же самое для ISO.

Обратите внимание, что пример экспозиции будет работать, только если первые 2 символа всегда равны '1 /'. Я могу переписать его для более общего случая, например, «2.9 / 700», если вы хотите

...