在oracle 11的数字列中按最后一位数排序

时间:2013-09-24 15:32:52

标签: sql oracle11g digit sql-order-by

我的表格中有一个数字列,我必须根据该列值的最后一位数来订购记录。

对于ex,我希望所有记录以'2'结尾并由'John'先创建,然后保持如下左侧
     ## Number ## ## CreatedBy ##

 3234445452         John    

 3432454542         John

 3432454572         Alex

 1234567890         John

 3432432441         John

感谢您的帮助......

2 个答案:

答案 0 :(得分:2)

如果您想按最后一位数字排序,可以使用mod(value, 10)。如果你真的希望首先以2结尾(我认为这不比其他要求那么陌生)那么你可以在order by子句中使用case语句:< / p>

with t42 as(
  select 3234445452 as value from dual
  union all select 3432454542 from dual
  union all select 1234567890 from dual
  union all select 3432432441 from dual
)
select value
from t42
order by case when mod(value, 10) = 2 then 0 else 1 end, mod(value, 10), value;

     VALUE
----------
3234445452 
3432454542 
1234567890 
3432432441 

因此,首先以2结尾,然后按最后一位数排序,所以结尾'桶'将是2, 0, 1, 3, 4, 5, ...,来自{{1}的前两个参数}。然后第三个参数在每个'桶'中按数字顺序排列值,这将order by放在3234445452之前。


您可以在3432454542中添加其他字段。你只需要为字符串order by;这可能有点过头了:

case

答案 1 :(得分:-1)

SELECT字段,        SUBSTR(字段,长度(TRIM(字段)),1),

FROM table

样品

值最后一个Field,Lenght,没有长度空间的字段
00004 4 20 5