首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

自定格式的数据排序和比较有关问题

2012-01-10 
自定格式的数据排序和比较问题一列数据,nvarchar类型,格式如: xxx-xxx-xxx ,x为数字,但一段xxx的数字位

自定格式的数据排序和比较问题
一列数据,nvarchar类型,格式如: "xxx-xxx-xxx ",x为数字,但一段xxx的数字位数不固定,排序规则为先比较第一段xxx的数字大小,再比较第二段xxx的大小,最后再比较第三段xxx的大小,有什么好方法来实现吗?

[解决办法]


select *
from
(
select '1000-111-22 ' as ID
union all select '11-22-33 '
union all select '11-202-33 '
)A
order by cast(substring(ID,1,charindex( '- ',ID,1)-1) as int) ,
cast(substring(ID,charindex( '- ',ID,1)+1 ,
charindex( '- ',ID,charindex( '- ',ID,1)+1)-2
-charindex( '- ',ID,1)+1
)as int),
cast( substring(ID,charindex( '- ',ID,charindex( '- ',ID,1)+1)+1,Len(ID)) as int)

[解决办法]
select
[Field],
a=cast(left([Field],charindex( '- ',[Field])-1) as int),
b=cast(substring([Field],charindex( '- ',[Field])+1,len([Field])-charindex( '- ',reverse([Field]))-charindex( '- ',[Field])) as int),
c=right(Field,charindex( '- ',reverse([Field]))-1)
from [Table] order by 2,3,4

热点排行