Извлечь символы из строки с помощью SQL

У меня есть столбец идентификаторов, и мне нужно использовать SQL для извлечения первых двух символов после "-"

Я использую пользовательский SQL-запрос в Tableau 10.4.

Пример столбца:

ABC - BCA - IT
AD - HD - A
QWE - QWE - E

Что мне нужно:

BC
HD
QW

Я пытался использовать подстроку и функцию Charindex, но не могу ее получить. Любые идеи?


person user3381842    schedule 04.06.2018    source источник
comment
Отметьте свой вопрос с помощью базы данных, которую вы используете.   -  person Gordon Linoff    schedule 04.06.2018


Ответы (4)


Вы можете использовать:

select substring(example, charindex(' - ', example) + 3, 2)
from (values ('ABC - BCA - IT'), ('AD - HD - A')) v(example)
person Gordon Linoff    schedule 04.06.2018

Если вы работаете с SQL Server, вы можете использовать функцию substring():

select substring(col, charindex('-', col) + 1, 2)) as need
person Yogesh Sharma    schedule 04.06.2018
comment
Знаете ли вы, использую ли я пользовательскую функцию запроса SQL в Tableau, если поддерживаются функции подстроки/charindex? - person user3381842; 04.06.2018

С MySQL существует множество возможных выражений. Большая разница заключается в обработке строковых значений, которые не содержат ровно два символа тире.

MySQL предоставляет удобную функцию SUBSTRING_INDEX.

https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index

Предполагая, что строковые значения содержат ровно два символа тире, тогда что-то вроде этого:

 SELECT c.foo
      , TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(c.foo,'-',2),'-',-1)) AS mid
   FROM ( 
          SELECT  'ABC - BCA - IT' AS foo
          UNION ALL SELECT 'AD - HD - A'
          UNION ALL SELECT 'QWE - QWE - E'
        ) c

Опустите функцию TRIM, если мы не хотим удалять начальные и конечные пробелы.

foo              mid
---------------  ---
ABC - BCA - IT   BCA
AD - HD - A      HD
QWE - QWE - E    QWE
person spencer7593    schedule 04.06.2018

Прошло некоторое время с тех пор, как я работал с Tableau, но IIRC это должно работать:

LEFT(TRIM(SPLIT([Column], `-`, 2)), 2)

Насколько мне известно, ни одна версия Tableau не поддерживает substring.

Кроме того, это может также помочь:

MID([Column], FIND([Column], "-") + 2, 2)
person Jiggles32    schedule 04.06.2018