求一SQL, 字段字符串排序

ghost5216 2014-08-29 10:33:34
表TAB中有一字符串字段A

A 中存储的是数字组合
比如: 0302
21345
213567
31123
即可能存在相同的数字,长度不固定

怎么select 出A的结果集是排序好的

0023
12345
123567
11233

求帮助

谢谢
...全文
256 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtujedp 2014-09-03
  • 打赏
  • 举报
回复
/*排序函数*/ create function F_NUM_ORDER ( @str varchar(100) ) returns varchar(100) as begin declare @sStr varchar(1);--当前取字符 declare @nStr varchar(1);--当前字符的下一个 declare @i int; declare @j int; declare @len int; set @len=LEN(@str); if(@len>0) begin set @i=1; set @j=1; while @i<=@len begin while @j<=@len-@i-- begin set @sStr=SUBSTRING(@str,@j,1); set @nStr=SUBSTRING(@str,@j+1,1); if @sStr>@nStr begin set @str=STUFF( STUFF(@str,@j,1,@nStr),@j+1,1,@sStr); end set @j+=1; end set @i+=1; set @j=0; end end return @str; end /*创建测试表*/ create table t ( a varchar(100) ) /*插入测试数据*/ insert into t values('0302 ') insert into t values('21345') insert into t values('213567') insert into t values('31123') /*使用函数查询需要排序的字段*/ select dbo.F_NUM_ORDER (a)from t /*查询结果*/ 0023 12345 123567 11233
xiaodongni 2014-09-02
  • 打赏
  • 举报
回复
知道了 看懂了
xiaodongni 2014-09-02
  • 打赏
  • 举报
回复
0023 12345 123567 11233 这个按照啥排序的。 如果是安装每一个字符。 应该11233 在1234567 前面啊 也在12345 前面啊
lzw_0736 2014-09-01
  • 打赏
  • 举报
回复

WITH a0 (msg) AS
(
SELECT '0302' UNION ALL
SELECT '21345' UNION ALL
SELECT '213567' UNION ALL
SELECT '31123'
)
,a1 AS
(
SELECT ROW_NUMBER() OVER(ORDER BY @@servername) id,*
FROM a0
)
,a2 AS
(
SELECT id,msg,SUBSTRING(msg,1,1) msgb,1 n FROM a1
UNION ALL
SELECT id,msg,SUBSTRING(msg,n+1,1),n+1 FROM a2
WHERE n+1<=LEN(msg)
)
--SELECT * FROM a2 ORDER BY 1

SELECT msg=(SELECT ''+msgb FROM a2 WHERE id=a.id ORDER BY msgb FOR XML PATH(''))
FROM a2 a
GROUP BY id
OPTION(MAXRECURSION 0)
HelloWordGirl 2014-09-01
  • 打赏
  • 举报
回复
;WITH cte AS ( SELECT TOP(20) ROW_NUMBER() OVER(ORDER BY [object_id]) AS ID FROM sys.objects ), cte1 AS ( SELECT A.A, B.ID, SUBSTRING(A.A,B.ID,1) AS v FROM Tab AS A JOIN cte AS B ON SUBSTRING(A.A,B.ID,1)<>'' ) SELECT A, REPLACE( ( SELECT v AS [data()] FROM cte1 WHERE A=A.A ORDER BY v FOR XML PATH('') ),' ','') FROM Tab AS A
在路上_- 2014-08-29
  • 打赏
  • 举报
回复
对不起看错了,是字符串里的字符排序呀
在路上_- 2014-08-29
  • 打赏
  • 举报
回复
这样不行吗?

select A from TAB order by A

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧