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

Строка сервера sql разделена предпоследней

В таблице есть столбец со значениями

 ColA
------

a.b.c.d.e (car.make.model, car.la, kg)

ab.cd.ef (car.make.model)

a1.b2.c3.d4.e5(car.make.model, car.la, kg, av.vc.de)

Я хочу написать sql-запрос, чтобы разделить ColA по разделителю "." и выберите предпоследний.

Ожидаемый результат

Result
------
d

cd

d4

Я пробовал ParseName, но не вижу возможности выбрать предпоследний вариант.

Спасибо


  • Возможный дубликат Есть ли LastIndexOf в SQL Server? 23.05.2018
  • С какой целью публикуются дополнительные данные? Они, кажется, не влияют на ожидаемый результат. 23.05.2018

Ответы:


1

Используя DelimitedSplit8K Джеффа Модена:

USE Sandbox;
GO

CREATE TABLE #Sample (ColA varchar(500));
GO
INSERT INTO #Sample
VALUES ('a.b.c.d.e'),
       ('ab.cd.ef'),
       ('a1.b2.c3.d4.e5');
GO

SELECT *
FROM #Sample;

WITH Split AS(
    SELECT S.ColA,
           DS.*,
           MAX(DS.ItemNumber) OVER (PARTITION BY S.ColA) AS Items
    FROM #Sample S
         CROSS APPLY DelimitedSplit8K(S.ColA,'.') DS)
SELECT Item
FROM Split
WHERE ItemNumber = Items - 1;

GO

DROP TABLE #Sample

В идеале, однако, не храните данные в формате с разделителями. :)

23.05.2018
  • +1 за отличный ответ. +1000000 за это В идеале не хранить данные в формате с разделителями. 23.05.2018

  • 2

    Просто чтобы поиграть с использованием STRING_SPLIT:

    SELECT ColA, t.value
    FROM table1
    CROSS APPLY(SELECT value, 
                       COUNT(*) OVER () as cnt,
                       ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
                FROM STRING_SPLIT(ColA, '.')) AS t
    WHERE t.rn = t.cnt - 1
    

    Примечание. Эта функция доступна в SQL Server 2016.

    Примечание 2. Запрос работает при условии, что функция возвращает каждое значение в том же порядке, что и в строке.

    23.05.2018

    3

    Почему бы просто не использовать подстроку?

    DECLARE @ColA NVARCHAR(100) = 'a1.b2.c3.d4.e5(car.make.model, car.la, kg, av.vc.de)';
    SELECT REVERSE(LEFT(RIGHT(REVERSE(LEFT(@ColA, CHARINDEX('(', @ColA)-1)), LEN(LEFT(@ColA, CHARINDEX('(', @ColA)-1))-CHARINDEX('.',REVERSE(LEFT(@ColA, CHARINDEX('(', @ColA)-1)))), CHARINDEX('.',RIGHT(REVERSE(LEFT(@ColA, CHARINDEX('(', @ColA)-1)), LEN(LEFT(@ColA, CHARINDEX('(', @ColA)-1))-CHARINDEX('.',REVERSE(LEFT(@ColA, CHARINDEX('(', @ColA)-1)))))-1))
    

    Однако это последнее редактирование НЕ обрабатывает случай, когда в строке нет . или ( - не стесняйтесь расширять запрос соответствующим образом.

    23.05.2018
  • @sri Я изменил запрос в соответствии с вашим последним редактированием 23.05.2018

  • 4

    Попробуй это

    ;WITH CTE(ColA)
    AS
    (
    SELECT 'a.b.c.d.e'      UNION ALL
    SELECT 'ab.cd.ef'       UNION ALL
    SELECT 'a1.b2.c3.d4.e5'
    )
    SELECT ColA,REVERSE(SUBSTRING(ReqColA,0,CHARINDEX('.',(ColA)))) AS ReqColA
      FROM
    (
    SELECT ColA ,SUBSTRING(REVERSE(ColA),CHARINDEX('.',REVERSE(ColA))+1,LEN(REVERSE(ColA))) AS ReqColA  FROM CTE
    )dt
    

    Результат

    ColA            ReqColA
    -----------------------
    a.b.c.d.e       d
    ab.cd.ef        cd
    a1.b2.c3.d4.e5  d4
    
    23.05.2018
    Новые материалы

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

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

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

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

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

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

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