[英]oracle query to select values using IN operator
我有一个包含有效地点清单的字符串。
var locations = COLOMBO,DELHI,SINGAPORE
我想查询上述字符串中提及的所有属于该位置的员工
我正在使用以下查询
SELECT emp_id,emp_name
FROM EMPLOYEE
WHERE emp_location IN (locations) ;
Oracle正在将其视为单个字符串,并搜索以下查询字符串
SELECT emp_id,emp_name
FROM EMPLOYEE
WHERE emp_location IN ('COLOMBO,DELHI,SINGAPORE');
我想知道是否可以通过任何方式传递字符串并获得属于字符串中提到的位置的有效emp_id
, emp_name
。
正如这里提到的
首先,您需要使用REGEXP_SUBSTR
函数将字符串拆分为单个字符串
VAR locations = 'COLOMBO,DELHI,SINGAPORE';
SELECT REGEXP_SUBSTR(locations,'[^,]+', 1, level)
FROM dual
CONNECT BY REGEXP_SUBSTR(locations, '[^,]+', 1, level) IS NOT NULL;
然后将其用作选择中的子查询以获得所需的结果
VAR locations = 'COLOMBO,DELHI,SINGAPORE';
SELECT emp_id,emp_name FROM EMPLOYEE
WHERE emp_location in(
SELECT REGEXP_SUBSTR(locations,'[^,]+', 1, level) FROM dual
CONNECT BY REGEXP_SUBSTR(locations, '[^,]+', 1, level) IS NOT NULL);
您正在寻找字符串中提到的位置,因此实际上是在寻找作为字符串子字符串的位置。 Oracle为这种搜索提供了INSTR。
仅注意查找从逗号到逗号的完整城市(在开头和结尾添加逗号)。 因此,不要在“ LONDON,NEW YORK”中找到“ YORK”(因为“,YORK”不是“,LONDON,NEW YORK”的子串,没有逗号的“ YORK”将是“ LONDON,NEW YORK”的子串“)。
select emp_id,emp_name
from EMPLOYEE
where instr(','|| locations || ',' , ',' || emp_location || ',') > 0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.