您所要求的有几个步骤,每个步骤都有其自身的困难,这意味着您想使用 SQL 来完成。您在问题上的短语without writing a complex algorithm
和评论Everything is possible
不兼容。Everything is possible
为您尝试做的事情增加了很多复杂性,主要是因为 sql 没有做您在这里尝试做的事情。
- 首先验证字符串的格式:是的,可以,但是 SQL 是一种查询语言,如果可能,最好对外部的任何格式进行处理
- 然后将其拆分,考虑到可能出现的所有不同可能性:同样,SQL 不是为此而设计的,您可以这样做,但是您的数据有很多不同的情况
- 最后对值进行排序:再次排序并返回单个字符串。排序是在一个集合上完成的,而不是在一个值链中,但当然可以完成
@Remou 在评论中所说的是,您应该将这些值放在不同的行上,而不是列上的所有值。例如:
id value
1 a1
2 a41
3 s2
4 a52
5 a1b99ccc
从这里你可以开始做一些订购。您可以做的第一步是将字符串拆分为几行,保存在临时表上,然后从这里您可以使用一些东西。您可以使用以下代码段在行上拆分字符串:
DECLARE @str NVARCHAR(100)= 'T,23,3434,332SB,1-1KD', @separator VARCHAR(1)= ','
DECLARE @SplitedList TABLE (code NVARCHAR(30))
DECLARE @XMLList XML
SET @XMLList=CAST('<i>'+REPLACE(@str, @separator,'</i><i>')+'</i>' AS XML)
INSERT INTO @SplitedList
SELECT x.i.value('(./text())[1]','varchar(100)')
FROM @XMLList.nodes('i') x(i)
SELECT * FROM @SplitedList