Проверка строки на наличие подстроки

#sql #string #amazon-web-services #amazon-redshift #sql-like

#sql #строка #amazon-веб-сервисы #amazon-redshift #sql-подобный

Вопрос:

Как я могу проверить, является ли определенная подстрока (например 18UT ) частью строки в столбце?

Функция подстроки Redshifts позволяет мне «вырезать» определенную подстроку на основе начального индекса длины подстроки, но не проверять, существует ли конкретная подстрока в значении столбца.

Пример:

  ------------------ 
| col              |
 ------------------ 
| 14TH, 14KL, 18AB |
| 14LK, 18UT, 15AK |
| 14AB, 08ZT, 18ZH |
| 14GD, 52HG, 18UT |
 ------------------ 
  

Желаемый результат:

  ------------------ ------ 
| col              | 18UT | 
 ------------------ ------ 
| 14TH, 14KL, 18AB | No   |
| 14LK, 18UT, 15AK | Yes  |
| 14AB, 08ZT, 18ZH | No   |
| 14GD, 52HG, 18UT | Yes  |
 ------------------ ------ 
  

Ответ №1:

Вот один из вариантов:

 select col,
    case when ', ' || col || ', ' like '%, 18UT, %' then 'yes' else 'no' end has_18ut
from mytable
  

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

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

1. Просто и элегантно, спасибо! Я понимаю вашу точку зрения, и мое сердце обливается кровью при работе с этими данными (особенно потому, что в столбце разное количество 4-буквенных значений, от 1 до 17 разных ….), Но на данный момент я мало что могу с этим поделать.