日期:2014-05-17  浏览次数:20437 次

查询按字符串的数值大小排序问题
CREATE TABLE tb(Item varchar(10),Model varchar(10))
INSERT tb SELECT 'Table','10.5CM' 
UNION ALL SELECT 'Table','10CM'  
UNION ALL SELECT 'Table','12CM' 
Go

--怎么查询得到以下结果:(Model列的数字长度不一定,相当于按数字大小排序)
Item    Model
---------------------
Table 10CM
Table 10.5CM
Table 12CM

---------------------------
select * from tb order by Model
以上语句只能得到:
Item    Model
---------------------
Table 10.5CM
Table 10CM
Table 12CM
------最佳解决方案--------------------

CREATE TABLE tb(Item varchar(10),Model varchar(10))

 INSERT tb 
 SELECT 'Table','10.5CM' 
 UNION ALL SELECT 'Table','10CM'  
 UNION ALL SELECT 'Table','12CM' 

select * from tb order by cast(replace(Model,'CM','') as decimal)
 
/*
 Item       Model
---------- ----------
Table      10CM
Table      10.5CM
Table      12CM

(3 row(s) affected)
*/

------其他解决方案--------------------
非常感谢,因为后面的单位可能随机,不一定是CM,有可能是其他的字母,怎么处理。 
------其他解决方案--------------------
做单位换算后,统一单位才能排序.
------其他解决方案--------------------
我是想说,比如另一张单据,单位全都是用英寸,  "  即英文的双引号,
或者遇到用M(米),KG(公斤)等等,能否按前面的数值取出来排序。