你所要求的幾個步驟都涉及到它們各自的困難,因爲你想用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
是存儲這樣的'A1,A2,A3,A20一列中的數據,a21'?或者是那些多行? – Taryn
在輸入的數據中是否存在一致性? I.e它會永遠是一個Alpha然後Numerics? N99或N9。或者你可以有N9N999N例如?您正在查看的複雜算法。你想在SQL還是VBA中做到這一點。要麼可以完成。 –
一切皆有可能。這意味着像a1b99ccc(t)/ d100這樣的數據。它是一個單獨的列,我想在sql中完成。 – Hauke