Строка разделяется / разбивается на куски по столбцам из одного столбца varchar - PullRequest
0 голосов
/ 13 апреля 2020

Надеюсь, у всех есть производительные блокировки по всему миру. Это моя вторая проблема, с которой я хотел сегодня помочь.

У меня есть чат от телекоммуникационной компании, подписывающий новых клиентов. Я успешно свернул их в 2 строки по уникальному идентификатору - уникальное взаимодействие в чате между клиентом и агентом компании.

  • Я хотел бы теперь взять каждый столбец (текст) в каждой строке и разделить его на 5 равных столбцов varchar.
  • Цель состоит в том, чтобы разделить / разделить разговор на 5 различных этапов в этой таблице.
  • У меня нет доступа к разделителям, поскольку клиенты и сотрудники компании сами используют символы-разделители, поэтому это сложно.

Ниже у меня есть 2 изображения с тем, как выглядят данные сейчас и что я ищу.

ДО

Current DB image showing text in separate lines

ПОСЛЕ

What I would like to see when the text column is divided

Я посмотрел следующие статьи, чтобы попытаться взломать его, но застрял:

Вот страница SQL Fiddle, но я запуск этого кода в MS SQL Сервер: http://sqlfiddle.com/#! 9 / ddd08 c

Вот код создания таблицы:

CREATE TABLE Table1
    (`unique_id` double, `user` varchar(8), `text` varchar(144))
;

INSERT INTO Table1
    (`unique_id`, `user`, `text`)
VALUES
    (50314585222,  'customer', 'This is part 1 of long text. This is part 2 of long text. This is part 3 of long text. This is part 4 of long text. This is part 5 of long text.'),
    (50314585222, 'company', 'This is part 1 of long text This is part 2 of long text This is part 3 of long text This is part 4 of long text This is part 5 of long text'),
    (50319875222,  'customer', 'This is part 1 This is part 2 This is part 3 This is part 4 This is part 5'),
    (50319875222,  'company', 'This is part 1 This is part 2 This is part 3 This is part 4 This is part 5')
;

У меня есть запросил почти аналогичный алгоритм в R в моей истории. Я пытался сделать это в SQL.

1 Ответ

0 голосов
/ 13 апреля 2020

Мне удалось решить эту проблему с помощью оператора 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

Чтобы использовать этот код, вам нужно реализовать функции 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

И приведенные выше данные готовы к повороту что довольно просто.

Итак, заметки:

  • , которые нужно реализовать * 103 7 * Microsoft String Utility
  • вам нужно убедиться, что шаблон регулярного выражения работает для вас
  • вы можете разделить T- SQL Я использовал, проверьте другие столбцы функции регулярного выражения и даже сделать Dynami c Pivoting - код является примером и необходимо изменить / проверить его перед использованием в производстве
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...