Nano Hash - криптовалюты, майнинг, программирование

Разделить записи в столбце, разделенном разделителем

У меня проблема, с которой мне нужна помощь. У меня есть столбец с набором строк, разделенных знаком "." (Пример ниже) У меня есть запрос, чтобы разделить его с помощью подстроки и charindex, проблема заключается в том, что второй разделитель не всегда имеет одинаковую длину, поэтому, когда я делаю это, он не разделяется правильно.

Column A
100.11111.12.16
101.36333
101.REMOTE.01
200.ACTIVE

Мне нужно, чтобы приведенные выше данные были разделены на 3 столбца.

Column A           Column B      Column C     Column D
100.11111.12.16    100           11111          12.16
101.36333          101           36333  
101.REMOTE.01      101           REMOTE          01
200.ACTIVE         200           ACTIVE

Как видите, второй разделитель не всегда находится в одной и той же позиции. Первый всегда после 3, поэтому я могу его разделить, но со вторым у меня проблемы с разделением, потому что я не могу определить точное местоположение.


Ответы:



2

Вот один из способов использования строковых функций

SELECT [Column A] = t.string, 
       [Column B] = LEFT(t.string, Charindex('.', t.string) - 1), 
       [Column C] = Reverse(Parsename(Reverse(cs.string), 1)), 
       [Column D] = Stuff(cs.string, 1, NULLIF(fpos, 0), '') 
FROM   Yourtable t 
       CROSS apply(VALUES (Substring(string, Charindex('.', string) + 1, Len(string))))cs(string) 
       CROSS apply(VALUES (Charindex('.', cs.string))) p (fpos) 

Ссылки MSDN:

29.07.2017

3

Другой вариант использования небольшого XML в сочетании с CROSS APPLY

Пример

Declare @YourTable Table ([Column A] varchar(50))
Insert Into @YourTable Values 
 ('100.11111.12.16')
,('101.36333')
,('101.REMOTE.01')
,('200.ACTIVE')

Select A.* 
      ,[Column B] = B.Pos1
      ,[Column C] = B.Pos2
      ,[Column D] = substring(concat('.'+B.Pos3,'.'+B.Pos4),2,50)
 From  @YourTable A
 Cross Apply (
                Select Pos1 = xDim.value('/x[1]','varchar(max)')
                      ,Pos2 = xDim.value('/x[2]','varchar(max)')
                      ,Pos3 = xDim.value('/x[3]','varchar(max)')
                      ,Pos4 = xDim.value('/x[4]','varchar(max)')
                From  (Select Cast('<x>' + replace(A.[Column A],'.','</x><x>')+'</x>' as xml) as xDim) as X
             ) B

Возврат

введите здесь описание изображения

29.07.2017

4

Если максимальное количество точек равно 3, то parsename может выполнить всю работу:

select columnA,
       parsename(reverse(columnA),1) columnB,
       parsename(reverse(columnA),2) columnC,
       parsename(reverse(columnA),3) + isnull('.'+parsename(reverse(columnA),4),'')  columnD
from table
29.07.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..