T-SQL сортировка текста - PullRequest
       17

T-SQL сортировка текста

0 голосов
/ 23 января 2012

Один из столбцов (скажем, столбец1 в таблице Table1) хранит данные следующим образом

Column1
test2;test1;test3
test21;test11;test32
--

Я хочу обновить этот столбец, чтобы данные сохранялись в отсортированном виде (после разбиения данных по;) следующим образом

Column1
test1;test2;test3
test11;test21;test32
--

Как написать запрос в простейшей форме? Я использую SQL Server 2005


Могу ли я предположить, что нет простого решения, доступного с использованием T-SQL, тогда я могу использовать функцию CLR?

Ответы [ 2 ]

1 голос
/ 29 января 2012

Пример того, как сделать это в T-SQL на основе набора.Предполагается, что целевая таблица имеет PK, который однозначно идентифицирует каждую строку.
Обратите внимание, что сортировка основана на тексте.Я добавил третью строку тестовых данных, чтобы показать это.

DECLARE @t TABLE
(id int ,column1 varchar(50))

INSERT @t
SELECT 1,'test2;test1;test3'
UNION ALL SELECT 2,'test21;test11;test32'
UNION ALL SELECT 3,'test222;test22;test2;test1;test3'

DECLARE @chr_delim char(1)
SET @chr_delim = ';'

;WITH splitCTE
AS
(
SELECT  D.id
        ,SUBSTRING(s,n,CHARINDEX(@chr_delim, s + @chr_delim,n) -n) as ELEMENT
FROM (SELECT id, column1 as s from @t) AS D
JOIN (SELECT ROW_NUMBER() OVER (ORDER BY name) AS n
      FROM master..spt_values
      ) AS nums
ON n <= LEN(s)
AND SUBSTRING(@chr_delim + s,n,1) = @chr_delim
)
UPDATE t
SET column1 = z.col1
FROM @t AS t
JOIN    (
            SELECT DISTINCT id , STUFF(d.x,1,1,'') AS col1
            FROM splitCTE AS r
            CROSS APPLY (SELECT ';' + ELEMENT 
                                 FROM splitCTE AS c 
                                 WHERE c.id = r.id 
                                 ORDER BY ELEMENT FOR XML PATH ('')
                                ) d(x)
        ) AS z
ON z.id = t.id      

SELECT * FROM @t
1 голос
/ 23 января 2012

Это невозможно через необработанный SQL.Вы можете выяснить реализацию функции SPLIT (T-SQL или CLR) (например, http://blogs.microsoft.co.il/blogs/itai/archive/2009/02/01/t-sql-split-function.aspx, что) и обрабатывать данные посредством временного преобразования списка строк в таблицу, сортировать и затем присоединять обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...