Дополнительно
Как разделить значение, разделенное запятыми, на столбцы
У меня есть такой стол
Value String
-------------------
1 Cleo, Smith
Я хочу разделить строку, разделенную запятыми, на два столбца
Value Name Surname
-------------------
1 Cleo Smith
Мне нужны только два фиксированных дополнительных столбца
123
33
Ваша цель может быть решена с помощью следующего запроса -
На сервере sql нет готовой функции Split, поэтому нам нужно создать пользовательскую функцию.
а также проверьте ссылку ниже для справки
http://jahaines.blogspot.in/2009/06/converting-delimited-string-of-values.html
Базовый ответ на XML прост и чист
обратитесь это
Я думаю, что это круто
С КРЕСТ ПРИМЕНЕНИЕМ
Попробуйте это (измените экземпляры «на» или «любой разделитель», который вы хотите использовать)
Пример использования:
Есть несколько способов решить эту проблему, и уже было предложено много разных способов. Проще всего было бы использовать
LEFT
/SUBSTRING
и другие строковые функции для достижения желаемого результата.Пример данных
Использование строковых функций, таких как
LEFT
Этот подход не работает, если в строке больше 2 элементов. В таком сценарии мы можем использовать сплиттер, а затем использовать
PIVOT
или преобразовать строку вXML
и использовать.nodes
для получения элементов строки. Решение на основе XML было детализировано aads и bvr в их решении.Ответы на этот вопрос, которые используют сплиттер, все используют
WHILE
, который неэффективен для расщепления. Проверьте это сравнение производительности. Одним из лучших сплиттеров является «DelimitedSplit8K», созданный Джеффом Моденом. Вы можете прочитать больше об этом здесьРазделитель с
PIVOT
Выход
DelimitedSplit8K
Джефф МоденЯ думаю, что PARSENAME - это аккуратная функция, используемая для этого примера, как описано в этой статье: http://www.sqlshack.com/parsing-and-rotating-delimited-data-in-sql-server-2012/
Функция PARSENAME логически разработана для анализа четырехчастных имен объектов. Хорошая вещь о PARSENAME заключается в том, что он не ограничивается разборкой только имен четырехчастных объектов SQL Server - он будет анализировать любую функцию или строковые данные, которые разделены точками.
Первый параметр - это объект для анализа, а второй - целочисленное значение части объекта для возврата. В статье обсуждаются анализ и вращение разделенных данных - телефонных номеров компании, но их также можно использовать для анализа данных имени / фамилии.
Пример:
В статье также описывается использование выражения Common Table Expression (CTE) под названием «replaceChars» для запуска PARSENAME по значениям, замененным разделителем. CTE полезен для возврата временного представления или набора результатов.
После этого, функция UNPIVOT использовалась для преобразования некоторых столбцов в строки; Функции SUBSTRING и CHARINDEX использовались для очистки несоответствий в данных, и функция LAG (новый для SQL Server 2012) был использован в конце, поскольку это позволяет ссылаться на предыдущие записи.
С SQL Server 2016 мы можем использовать string_split для достижения этой цели:
Мы можем создать функцию как эту
Затем мы можем разделить значения CSV в наши соответствующие столбцы, используя оператор SELECT
Я думаю, что следующая функция будет работать для вас:
Сначала нужно создать функцию в SQL. Нравится
Вы можете вызвать эту функцию, как это:
Реализация:
Результат будет таким:
Используйте функцию Parsename ()
Результат
Попробуй это:
Вы можете использовать встроенную функцию
STRING_SPLIT
, которая доступна только при уровне совместимости 130. Если уровень совместимости вашей базы данных ниже 130, SQL Server не сможет найти и выполнить функциюSTRING_SPLIT
. Вы можете изменить уровень совместимости базы данных, используя следующую команду:Синтаксис
см. документацию здесь
Использование функции instring :)
Использовал две функции
substring (строка, позиция, длина)
== > возвращает строку из positon в длинуinstr (строка, шаблон)
== > возвращает положение шаблона.Если мы не предоставим аргумент длины в подстроке, он вернется до конца строки
Я столкнулся с аналогичной проблемой, но сложной, и, поскольку это первая тема, которую я нашел в отношении этой проблемы, я решил опубликовать свой вывод. я знаю, что это сложное решение простой проблемы, но я надеюсь, что смогу помочь другим людям, которые идут в эту ветку в поисках более сложного решения. мне пришлось разделить строку, содержащую 5 чисел (имя столбца: allsFeed), и показать каждый номер в отдельном столбце. например: 8,1,2,2,2 должно быть показано как:
Решение 1: использование функций XML: это решение для самого медленного решения на сегодняшний день
Решение 2: использование функции Split и поворота. (функция разделения разделяет строку на строки с именем столбца Data)
Решение 3: использование строковых функций манипуляции - быстрее всего с небольшим отрывом по сравнению с решением 2
поскольку levelsFeed содержит 5 значений строк, которые мне нужны для использования функции подстроки для первой строки.
Я надеюсь, что мое решение поможет другим, кто попал в эту ветку, в поисках более сложных методов разделения на столбцы
Это сработало для меня
Эта функция наиболее быстрая:
Пример использования: