Подстрока переменной длины между двумя символами

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Данные выглядят следующим образом:

 Initiative: Credible Sources;
Initiative: Just in Time;
Initiative: Database Normalization;
 

Я хочу, чтобы это выглядело так:

 Credible Sources
Just in Time
Database Normalization
 

Довольно просто избавиться от одного или другого.

Это:

 SELECT DISTINCT LEFT(OPTIONAL_FIELD_2, CHARINDEX(';', OPTIONAL_FIELD_2   ';')-1) AS OPTIONAL_FIELD_2
FROM my_table
ORDER BY OPTIONAL_FIELD_2
 

Дает мне это:
Инициатива: надежные источники
Инициатива: как раз вовремя
Инициатива: нормализация базы данных

И это:

 SELECT DISTINCT RIGHT(OPTIONAL_FIELD_2, LEN(OPTIONAL_FIELD_2)-12) AS OPTIONAL_FIELD_2
FROM my_table
ORDER BY OPTIONAL_FIELD_2
 

Дает мне это:

 Credible Sources;
Just in Time;
Database Normalization;
 

Трудно понять, как объединить их.

Ответ №1:

Как насчет простого использования substring() ?

 select replace(substring(option_field_2, 13, 999), ';', '')
 

Или, если вы не знаете, какой длины префикс:

 select replace(stuff(option_field_2, 1, charindex(':', option_field_2)   1, ''), ';', '')
 

Вот скрипка db<> .

Комментарии:

1. Спасибо, @gordon-linoff, это работает. Я склонен переосмысливать вещи, и обычно это простое решение 🙂