あなたのベストショットは、自然に並べ替えるものにデータを変換することだと思います。ツリー構造が常に99人以下の子供を持つ場合、私は以下のような関数を作成することができます。 sort関数で "GetTreeStructureSort(columnName)"を使用するだけです。この中
1
1-10
1-3
2
:(。あなたは3桁の数字の可能性を持っている場合は、あなたがより直感的に、これを調整することができます)
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
これは、これらの結果を変換します
01
01-03
01-10
02
私はこれを次のコードでテストしました:
DECLARE @something varchar(255)
set @something = '1-10-3-21'
SELECT dbo.GetTreeStructureSort(@something)
ゼロを含むパディング数<10がまさに私が必要とするものです。それが指摘された時は明らかです。このようなきめ細かな答えをありがとう。 – drewm