我在SQL Server 2000
数据库中有一个VARCHAR
列,可以包含字母或数字.这取决于客户在前端如何配置应用程序.
当它确实包含数字时,我希望它按数字排序,例如"1"、"2"、"10"而不是"1"、"10"、"2".只包含字母或字母和数字(如"A1")的字段可以按正常字母顺序排序.例如,这将是一个可接受的排序顺序.
1
2
10
A
B
B1
实现这一目标的最佳方式是什么?
我在SQL Server 2000
数据库中有一个VARCHAR
列,可以包含字母或数字.这取决于客户在前端如何配置应用程序.
当它确实包含数字时,我希望它按数字排序,例如"1"、"2"、"10"而不是"1"、"10"、"2".只包含字母或字母和数字(如"A1")的字段可以按正常字母顺序排序.例如,这将是一个可接受的排序顺序.
1
2
10
A
B
B1
实现这一目标的最佳方式是什么?
一种可能的解决方案是在数字值的前面加一个字符,这样所有的字符串长度都相同.
下面是一个使用这种方法的示例:
select MyColumn
from MyTable
order by
case IsNumeric(MyColumn)
when 1 then Replicate('0', 100 - Len(MyColumn)) + MyColumn
else MyColumn
end
100
应该替换为该列的实际长度.