按字母数字值排序,如数字

时间:2012-11-05 10:39:17

标签: tsql sql-server-2005

MSSQL Serrver 2005上有一个表的字段为VARCHAR。它包含字母数字值,如“A,B,C,D ...... 1,2,3,...,10,11,12”等。

当我使用以下代码时;

....   
ORDER BY TableFiledName

订购结果如下 11,12,1,2,3等。

当我使用以下代码时,

....   
 ORDER BY
    CASE WHEN ISNUMERIC(TableFiledName) = 0 THEN CAST(TableFiledNameAS INT) ELSE TableFiledName END

我收到如下错误消息;

  

Msg 8114,Level 16,State 5,Line 1转换数据类型varchar时出错   漂浮。

如何得到这样的排序结果: 1,2,3,4,5,6,7,8,9,10,11,12等。

提前致谢。

1 个答案:

答案 0 :(得分:4)

当字段为数字时,

ISNUMERIC返回1.

所以你的第一个问题是它应该......

   CASE WHEN ISNUMERIC(TableFiledName) = 1 THEN 

但仅此一项工作就没有了。

您需要在值前加零,然后选择最右边的

 order by 
      case when ISNUMERIC(FieldName) =1 
      then right('000000000'+FieldName, 5)
      else FieldName 
      end

使用5允许数字高达99999 - 如果您的数字更高,请增加该数字。

这会将数字放在字母前面。如果您想要数字前面的字母,那么您可以在排序顺序中添加isnumeric - 即:

 order by
      isnumeric(FieldName),
      case...

这不会应对小数,但你还没有提到它们