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等。
提前致谢。
答案 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...
这不会应对小数,但你还没有提到它们