Я пытаюсь разобрать текст произвольной формы с выражением регистра и не могу получить ожидаемые результаты. Подскажите, пожалуйста, могу ли я достичь этого в SQL?
. Здесь я показал некоторые примеры данных в ссылке SQL Fiddle ниже, но таблица city_lookup имеет 100 строк, потому что в городе несколько городов. Штат. Заявление о случае было просто попыткой поместить их в соответствующие ведра. Текст произвольной формы может содержать несколько ключевых слов, которые могут содержать города из справочной таблицы (city_lookup), и для каждого такого случая нам нужно записать посещенное состояние пользователя. Например, если текст произвольной формы содержит два города, я должен иметь возможность записать вывод в виде двух разных строк с каждым посещенным городом для одного и того же пользователя.
SQL Fiddle Link - http://sqlfiddle.com/# ! 7 / 61ef9
DDL
create table city_lookup(city varchar(50), state varchar(50));
insert into city_lookup values('dallas', 'texas');
insert into city_lookup values('austin', 'texas');
insert into city_lookup values('phoenix', 'arizona');
insert into city_lookup values('tuscon', 'arizona');
insert into city_lookup values('fresno', 'california');
insert into city_lookup values('monterey', 'california');
create table log_cities
(user_id int, visited_log varchar(512));
INSERT INTO log_cities values(123, 'This user was in dallas also probably in monterey');
INSERT INTO log_cities values(234, 'Logged: visisted tuscon');
INSERT INTO log_cities values(456, 'In March she visited texas, austin');
INSERT INTO log_cities values(567, 'He was probably here in phoenix and austin');
Запрос
select
user_id,
case
when visited_log like '%dallas%' then 'texas'
when visited_log like '%austin%' then 'texas'
when visited_log like '%phoenix%' then 'arizona'
when visited_log like '%tuscon%' then 'arizona'
when visited_log like '%fresno%' then 'california'
when visited_log like '%monterey%' then 'california'
else 'None' end visited_state
from
log_cities;
Ввод и вывод
-- Actual output
123 texas
234 arizona
456 texas
567 arizona
-- Actual output expected
123 texas
123 california
234 arizona
456 texas
567 arizona
567 texas