如何按曝光、焦点和iso(数字而非字符串)执行SQL顺序

如何按曝光、焦点和iso(数字而非字符串)执行SQL顺序,sql,sorting,floating-point,sql-order-by,numeric,Sql,Sorting,Floating Point,Sql Order By,Numeric,曝光、焦点和Iso列未正确排序。似乎它们都被解释为字符串并按字符串排序。例如,如果我对曝光进行排序,值可以如下所示: 1/800、1/800、1/800、1/80、1/675、1/640、1/60、1/500 如果我对焦点进行排序,它可以如下所示: 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排序,它可以如下所示: 80080080080806406406050050 编辑:(和答案)在一个sql查询中完成所有这些操作。

曝光、焦点和Iso列未正确排序。似乎它们都被解释为字符串并按字符串排序。例如,如果我对曝光进行排序,值可以如下所示:

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

如果我对焦点进行排序,它可以如下所示:

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排序,它可以如下所示:

80080080080806406406050050


编辑:(和答案)在一个sql查询中完成所有这些操作。

我在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)))   
对于focal,您可以按收件人编号(focal)订购,ISO也可以这样做


请注意,仅当前2个字符始终为“1/”时,曝光示例才有效。我可以将其改写为更一般的情况,如“2.9/700”,如果您希望

ISO和Focal,我可以只做ABS(field_value),但我不确定曝光。存储这些值的表格是什么样子的?如果它看起来像鸭子,嘎嘎作响……您正在对字符串进行排序(
1/800
不是一个数值,如果它存储在这样的表中,那么它将沿着
0.00125
的行)。其他价值观可能也是如此;这些列可能定义为
CHAR
VARCHAR
NVARCHAR
,具体取决于您使用的RDBMS。如果对字符串进行排序,它们将按字符串排序,因为它们就是这样。而@billinkc试图指出,“如果它看起来像只鸭子,嘎嘎叫起来像只鸭子,那么它很可能是只鸭子”。如果它看起来像一个字符串,行为也像一个字符串,那么它可能是一个字符串。@billinkc:因为标题是“SQL ORDER BY”,标记是“SQL”,所以它可能是一个数据库。:)@KenWhite One会这么认为,但在这一点上,我已经放弃了对用户在这个世界上做什么的假设。给出注释“不知道值进入函数时会是什么样子,只知道它是一个字符串”,我想验证与OP试图执行的操作同步的标记。