求助以下sql问题,应用到了字符串函数和排序问题,需要直接输出的语句,着急在线等,谢谢

 我来答
tjrmgs
推荐于2016-06-20 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1034万
展开全部

这个问题的正确做法是用约束规范该字段的值为固定的格式的文本。即固定长度、固定分隔符、固定各个分段的长度、固定只使用数字的等,例如 固定格式 00-000-00  格式固定后排序就很简单了。否则要对该字段排序就会很麻烦,即使实现效率也会很差,因为输入的字段值可能不规范其可靠性成疑。


下面是使用字符串函数,根据分隔符减号的位置算出各段数字的大小的排序实现方案,供参考

(这里假设分隔符都是‘-’,其它均为0-9的数字且国定有3段长度各不固定数字)

select * from paixu order by 
Cast(Left(code,Charindex('-',code)-1) as int),
Cast(Substring(code,Charindex('-',code)+1,Charindex('-',code,Charindex('-',code)+1)-1-Charindex('-',code)) as int),
Cast(Substring(code,Charindex('-',code,Charindex('-',code)+1)+1,100) as int);

由上述代码可见排序表达式相当复杂,尽管可实现排序但是效率肯定不高

百思卜得其解
2015-11-13 · TA获得超过122个赞
知道小有建树答主
回答量:132
采纳率:100%
帮助的人:54.4万
展开全部
select *,
CONVERT(int,left(n,2)) n1,
CONVERT(int,SUBSTRING(n,4,charindex('-',n,4)-charindex('-',n,0)-1)) as n2,
CONVERT(int,right(n,LEN(n)-charindex('-',n,4))) as n3 from #a order by n1,n2,n3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式