2009-02-12 73 views

回答

1

如果可能,尝试拆分数据,以便任何数字信息都在其自己的字段中。 字段中的字符串数据和数字数据总是会产生字符串类型的数据,因此'A2'>'A11'。

1

您需要将varchar数据转换/转换为数字数据类型,然后通过对数据进行排序来执行排序。

你可能还需要分割你的数据串,所以例如通过caluse顺序可能是:

order by 
convert(int,left(columnName,2)) asc, 
convert(int,subtring(columnName,4`,2)) 

这将取决于哪一个字符串元素代表其日期组件。

有意义吗?

0

修改表格并添加一个比较列。编写一个读取字符串的小程序,并将它们转换为数据库可以转换的格式。就你而言,我想DATE是一个很好的候选人。

在一般情况下,使用VARCHAR列并将所有数字格式化为五个(或更多)数字(使用前导零/空格,即右对齐)。

之后,您可以使用比较列来排序数据。

0

如果我是你,我会通过一个棘手的表达命令。我们假设斜线前最多有2或3位数字。如果你写

order by case charindex('/', val) 
      when 0 then convert(int, val) 
      else convert(int, substr(val, 1, charindex('/', val) -1) 
     end * 1000 
      + case charindex('/', val) 
       when 0 then 0 
       else convert(float, replace(substring(val, 1 + charindex('/', val), 
                length(val)), '-', '.')) 
      end 

如果我没有任何拼写错误,下面应转换05至5000,5月1日至5001,05/1-1至5001.1,事情应该排序您想要的方式,假设连字符后最多只有一个数字。否则,你可以通过分割和左边填充适当数量的零来解决它,但是表达式会变得更丑陋......

相关问题