首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按非数字层次结构字符串进行数字排序

按非数字层次结构字符串进行数字排序
EN

Stack Overflow用户
提问于 2011-06-28 22:13:07
回答 1查看 715关注 0票数 2

我有一个表,其中包含表示树结构的数据,其中一列表示行在分层树中的位置。每个级别用-分隔。

代码语言:javascript
复制
1
1-1
2
2-1
2-2
2-2-1
2-2-2
2-2-2-1

只需在此列上使用ORDER BY,就可以按顺序检索树。当任何级别上的项目超过10个时,这一点就会下降,因为列是按字母顺序排序的。MySQL在3之前对10进行排序。

代码语言:javascript
复制
Actual result:

1
1-10
1-3
2

Desired result:

1
1-3
1-10
2

这些值可以有任意数量的深度级别。

是否可以在MySQL中对此数据进行数字排序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-29 02:31:56

我认为你最好的办法就是把数据转换成可以自然排序的东西。如果你的树形结构总是少于99个子代,你可以创建一个像我下面这样的函数。您只需在排序函数中使用"GetTreeStructureSort(columnName)“即可。(如果您有3位数字的可能性,您可以将其调整为更直观。)

代码语言:javascript
复制
CREATE FUNCTION GetTreeStructureSort
(
    -- Add the parameters for the function here
    @structure varchar(500) 
)
RETURNS varchar(500)
AS
BEGIN

    DECLARE @sort varchar(500)

    -- Add a hyphen to the beginning and end to make all the numbers from 1 to 9 easily replaceable
    SET @sort = '-' + @structure + '-'

    -- Replace each instance of a one-digit number to a two-digit representation
    SELECT @sort = REPLACE(@sort, '-1-', '-01-')
    SELECT @sort = REPLACE(@sort, '-2-', '-02-')
    SELECT @sort = REPLACE(@sort, '-3-', '-03-')
    SELECT @sort = REPLACE(@sort, '-4-', '-04-')
    SELECT @sort = REPLACE(@sort, '-5-', '-05-')
    SELECT @sort = REPLACE(@sort, '-6-', '-06-')
    SELECT @sort = REPLACE(@sort, '-7-', '-07-')
    SELECT @sort = REPLACE(@sort, '-8-', '-08-')
    SELECT @sort = REPLACE(@sort, '-9-', '-09-')

    -- Strip off the first and last hyphens that were added at the beginning.
    SELECT @sort = SUBSTRING(@sort, 2, LEN(@sort) - 2)

    -- Return the result of the function
    RETURN @sort

END

这将转换这些结果:

代码语言:javascript
复制
1
1-10
1-3
2

如下所示:

代码语言:javascript
复制
01
01-03
01-10
02

我使用以下代码对此进行了测试:

代码语言:javascript
复制
DECLARE  @something varchar(255)
set @something = '1-10-3-21'

SELECT dbo.GetTreeStructureSort(@something)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6507862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档