[英]selecting values from multiple records in one row but different columns in SQL
[英]Selecting Multiple values from one string in SQL
大家好我正在使用Oracle11。要求是仅选择具有“纽约”和“达拉斯”的记录。 请注意,具有相同记录的城市的顺序可能会更改。 因此,从以下记录集中,我应该只有两条记录(即Rec#3和5)。 请注意,使用wm_concat函数将“城市”中的值串联起来
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
我在Postgres上写它是因为oracle提琴是错误的,但应该相同
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;%' ;
我不知道Oracle语法,但是像这样:
Select columns where cities like "Dallas" and cities like "New York"
尝试这个
SELECT * from TABLE_NAME where City like '%New York%Dallas%' or City like '%Dallas%New York%'
尝试使用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(;|$)');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.