2016-02-08 4 views
0

Привет, Все, что я использую Oracle 11. Требование состоит в том, чтобы выбирать только те записи, где у нас есть «Нью-Йорк» и «Даллас». Обратите внимание, что порядок городов с одной и той же записью может измениться. поэтому из следующего набора записей i должно быть только две записи (т. е. ReC# 3 и 5). Обратите внимание, что значения, поступающие в городе сцепляются с помощью функции wm_concatВыбор нескольких значений из одной строки в SQL

Rec# City 
1 New York 
2 Huston 
3 New York;Dallas 
4 Los Angles 
5 Los Vegas;Dallas;San Dieago;New York 
6 Huston;Chicago;Salt Lake City;Cleaveland 

ответ

0

Я не знаю синтаксис Oracle, но что-то вроде этого:

Select columns where cities like "Dallas" and cities like "New York"

+0

Это, вероятно, только найти ReC# 1, вы должны символы –

+0

И значит он должен соответствовать как Нью-Йорк и Даллас, почему бы он соответствовал только Рек # 1? – tokamak

+0

проверить дантелла и мой ответ. Вам нужно включить подстановочный знак '%', иначе только будет соответствовать точная строка –

0

Попробуйте

SELECT * from TABLE_NAME where City like '%New York%Dallas%' or City like '%Dallas%New York%' 
+0

Можем ли мы это сделать, используя подстроку? – Drake

2

Я написал его на Postgres, потому что скрипка оракула ошибочна, но должна быть одинаковой

SQL Fiddle Demo

SELECT * 
FROM cities 
WHERE "City" LIKE '%New York%' 
AND "City" LIKE '%Dallas%' 

Проблема заключается в том, если вы пытаетесь найти что-то вроде 'York' может соответствовать частично, а также найти 'New York', так что вы можете исправить как этот

SELECT * 
FROM cities 
WHERE "City" LIKE '%York%'; -- will find `New York` 

SELECT * 
FROM cities 
WHERE ';' || "City" || ';' LIKE '%;York%;'; -- correct solve 

Как @Egor предложить вы можете сделать он с одним LIKE

SELECT * 
FROM cities 
WHERE ';' || "City" || ';;' || "City" || ';' LIKE '%;Dallas;%;New York;%' ; 
+1

'select ... where ';' || city || ';;' || city || ';' например, «%; New York,%; Dallas;%» –

+0

Я уже был в своем ответе, который позволил городу, который мог быть частью другого города или произошел в начале/конце строки. Я удалю свой другой комментарий, если ваш пример обработает его. –

+0

@ Gary_W Да, его делает. :) Оба решения –

0

Попробуйте с REGEXP_LIKE, где город, которого искали, мог быть в начале или конце линии. Регулярное выражение означает, что поисковый город проходит по началу строки или разделителя, за которым следует разделитель или конец строки.

with tbl(rec, city) as (
    select 1, 'New York' from dual union 
    select 2, 'Huston' from dual union 
    select 3, 'New York;Dallas' from dual union 
    select 4, 'Los Angles' from dual union 
    select 5, 'Los Vegas;Dallas;San Dieago;New York' from dual union 
    select 6, 'Huston;Chicago;Salt Lake City;Cleaveland' from dual union 
    select 7, 'Huston;Chicago;Salt Lake City;New York;York' from dual union 
    select 8, 'York;Huston;Chicago;Salt Lake City' from dual 
) 
select rec, city 
from tbl 
where regexp_like(city, '(^|;)York(;|$)') 
and regexp_like(city, '(^|;)New York(;|$)'); 
+0

. Я включаю Йорк, чтобы расширить образец, ОП вопрос нужен Даллас –

+0

Почему вы сравниваете только «Йорк»? Я не вижу никакой пользы от этого в соответствии с тем, что спрашивает ОП. – tokamak

+0

Тестирование названия города, которое может быть частью другого названия города. То есть сопоставить город под названием «Йорк», но не «Нью-Йорк». Всегда старайтесь думать о непредвиденных условиях в ваших тестовых данных. –

Смежные вопросы