#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 разных ….), Но на данный момент я мало что могу с этим поделать.