这基本上是分解字符串并将其放置到表变量中,然后将其放回到一个字符串中。有一点需要注意的是,由于这是按字符串排序而不是整数,因此G-9将在G-10之后。如果你想按字母顺序排序然后用数字排序,你需要将字符串分成2列,1个字母和1个数字,然后进行相应的排序。
如果您有SQL Server 2016,那么可以使用string_split函数简化这个操作。
下面是查询:
DECLARE @input_string NVARCHAR(MAX) = 'G2-18, G3-21, G2-13, G-15, G1-16, G2-17, G3-9, G1-11, G2-12, B2-22, B-23, B-24, B1-25, B-28, B-29, B-30, B2-31, F2-69, F-70, F-71, F-72'
DECLARE @delimiter NVARCHAR(MAX) = ', '
DECLARE @output_string NVARCHAR(MAX) = ''
DECLARE @values_table TABLE (
string_values NVARCHAR(MAX)
)
WHILE (SELECT LEN(@input_string) - LEN(REPLACE(@input_string,@delimiter,''))) > 0
BEGIN
INSERT @values_table
SELECT SUBSTRING(@input_string,0,CHARINDEX(', ',@input_string))
SET @input_string = SUBSTRING(@input_string,CHARINDEX(@delimiter,@input_string)+2,LEN(@input_string))
END
INSERT @values_table
SELECT @input_string
DECLARE @row_counter INT = 1
WHILE @row_counter <= (SELECT COUNT(*) FROM @values_table)
BEGIN
SET @output_string = @output_string + (
SELECT
string_values
FROM (
SELECT
string_values
,ROW_NUMBER() OVER (ORDER BY string_values) AS row_num
FROM @values_table) sub_query
WHERE row_num = @row_counter) + @delimiter
SET @row_counter = @row_counter + 1
END
SELECT SUBSTRING(@output_string,0,LEN(@output_string)-2)
这里是TSQL用于UDF该需要进行排序的输入字符串和一个分隔符分割它。
CREATE FUNCTION udf_order_string(@input_string NVARCHAR(MAX), @delimiter NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @output_string NVARCHAR(MAX) = ''
DECLARE @values_table TABLE (
string_values NVARCHAR(MAX)
)
WHILE (SELECT LEN(@input_string) - LEN(REPLACE(@input_string,@delimiter,''))) > 0
BEGIN
INSERT @values_table
SELECT SUBSTRING(@input_string,0,CHARINDEX(', ',@input_string))
SET @input_string = SUBSTRING(@input_string,CHARINDEX(@delimiter,@input_string)+2,LEN(@input_string))
END
INSERT @values_table
SELECT @input_string
DECLARE @row_counter INT = 1
WHILE @row_counter <= (SELECT COUNT(*) FROM @values_table)
BEGIN
SET @output_string = @output_string + (
SELECT
string_values
FROM (
SELECT
string_values
,ROW_NUMBER() OVER (ORDER BY string_values) AS row_num
FROM @values_table) sub_query
WHERE row_num = @row_counter) + @delimiter
SET @row_counter = @row_counter + 1
END
SET @output_string = SUBSTRING(@output_string,0,LEN(@output_string)-2)
RETURN @output_string
END
你是什么意思排序列表? – LONG
因此,房地产经纪商交易返回如下数据:G2-18,G3-21,G2-13,G-15,G1-16,G2-17,G3-9,G1-11,G2-12,B2- 22,B-23,B-24,B1-25,B-28,B-29,B-30,B2-31,F2-69,F-70,F-71,F-72。我希望能够按字母顺序排序。 –
所以@RelatorFirmDeals是一个表变量?你的表变量结构是什么? – LONG