如何在Oracle SQL中判断UserName列值是否存在于ManagerList列中
Oracle SQL实现判断用户名是否在经理列表中
输入数据
| UserName | ManagerList |
|---|---|
| Abhi | Ayush; Abhi; Kirti |
| Suman | Ayush; Priti; Kirti |
| Satish | Ayush; Priti; Kirti; Satish |
需求
在Oracle SQL中判断每行的UserName列值是否存在于对应的ManagerList列中,并输出包含is_available列的结果——存在标记为Y,不存在标记为N。
预期输出
| UserName | ManagerList | is_available |
|---|---|---|
| Abhi | Ayush; Abhi; Kirti | Y |
| Suman | Ayush; Priti; Kirti | N |
| Satish | Ayush; Priti; Kirti; Satish | Y |
解决方案
使用Oracle的INSTR函数结合字符串拼接避免部分匹配问题,SQL语句如下:
SELECT UserName, ManagerList, CASE WHEN INSTR(';' || ManagerList || ';', ';' || UserName || ';') > 0 THEN 'Y' ELSE 'N' END AS is_available FROM your_table_name;
说明
- 在
ManagerList前后拼接分号,确保匹配完整的用户名(避免类似Ab被误判为存在于Abhi中的情况)。 INSTR函数返回子字符串的位置,结果大于0则表示用户名存在,否则不存在。
内容的提问来源于stack exchange,提问作者Chinu
相关产品推荐
相关产品推荐

