0

MSSQL Server 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

我收到如下错误消息;

消息 8114,级别 16,状态 5,第 1 行将数据类型 varchar 转换为浮点数时出错。

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

提前致谢。

4

1 回答 1

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...

这不会处理小数,但你没有提到它们

于 2012-11-05T10:41:16.347 回答