繁体   English   中英

从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提琴是错误的,但应该相同

SQL小提琴演示

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM