Извлечение текста из строки, где начальные и конечные символы одинаковы

#sql #sql-server

#sql #sql-сервер

Вопрос:

Как я могу получить текст между звездочками ****, учитывая, что начало и конец являются одинаковыми строковыми значениями?

 Create Table #temp
(
    TestString varchar(400)
)

insert into #temp
(
    TestString
)
select
    '**** mary had a little lamb****'
union
select
    '**** humpy dumpty had a great fall**** All the king''s horses and all the king''s men'
  

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

1. это будет **** всегда? если да, то вы можете сравнить первые 4 символа и последние 4 символа, используя SUBSTR, если то же самое, то используйте REPLCE() для замены * на «.

2. Да, это всегда будет текст между **** и *****. Я не могу сравнить последние 4 символа, потому что это не всегда будут последние 4 символа

Ответ №1:

Вы могли бы использовать базовые строковые функции следующим образом:

 SELECT
    TestString,
    SUBSTRING(TestString,
              CHARINDEX('****', TestString)   4,
              CHARINDEX('****', TestString, CHARINDEX('****', TestString)   1) - 5) AS contents
FROM yourTable;
  

ДЕМОНСТРАЦИЯ

Данные:

 WITH yourTable AS (
    SELECT '**** mary had a little lamb****' AS TestString UNION ALL
    SELECT '**** humpy dumpty had a great fall**** All the king''s horses and all the king''s men'
)
  

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

1. Я создам новый вопрос, если это будет лучше, но я совершенно забыл об этой ситуации. Есть ли простое решение? — ВЫБЕРИТЕ ‘bla **** abcd two two **** dfdfdfd’