Мне удалось решить эту проблему с помощью оператора T-SQL
ниже:
WITH DataSource AS
(
SELECT *
,'\b.{1,'+CAST(CEILING(LEN([text]) * 1.0 /5) AS VARCHAR(12)) +'}\b' AS [pattern]
FROM TAble1
), PreparedData AS
(
SELECT unique_id
,[user]
,'text' + CAST(RM.matchID + 1 AS VARCHAR(12)) as [column]
,RM.CaptureValue AS [value]
FROM DataSource T
CROSS APPLY [dbo].[fn_Utils_RegexMatches] ([text], [pattern]) RM
)
SELECT *
FROM PreparedData DS
PIVOT
(
max([value]) for [column] IN ([text1], [text2], [text3], [text4], [text5])
) PVT;
![enter image description here](https://i.stack.imgur.com/Nyl1J.png)
Чтобы использовать этот код, вам нужно реализовать функции SQL CLR для работы с регулярными выражениями в контексте T- SQL (вам нужно потратить некоторое время на понимание работы SQL CLR) - иначе вы будете невозможно использовать это решение.
Итак, имея функцию RegexMatches
, первая часть заключается в построении шаблона регулярного выражения для разделения данных:
SELECT *
,'\b.{1,'+CAST(CEILING(LEN([text]) * 1.0 /5) AS VARCHAR(12)) +'}\b' AS [pattern]
FROM TAble1;
Шаблон \b.number\b
и будет соответствовать части строк длиной number
, но не обрезать слова (проверьте, подходит ли вам граница, потому что в некоторых случаях не будет ).
Тогда Используя нашу функцию regex matches
, мы получаем такой результат (второе общее табличное выражение):
![enter image description here](https://i.stack.imgur.com/ewEqb.png)
И приведенные выше данные готовы к повороту что довольно просто.
Итак, заметки:
- , которые нужно реализовать * 103 7 * Microsoft String Utility
- вам нужно убедиться, что шаблон регулярного выражения работает для вас
- вы можете разделить T- SQL Я использовал, проверьте другие столбцы функции регулярного выражения и даже сделать Dynami c Pivoting - код является примером и необходимо изменить / проверить его перед использованием в производстве