Oracle SQL 逗号分隔参数在 where 子句中



我的表看起来像:

+----------+----------+
|stud_id   |stud_name |
+----------+----------+
|101       |A         |
|102       |B         |
|103       |C         |
|104       |D         |
|105       |E         |
+----------+----------+

我的查询

SELECT * FROM students_tbl stud WHERE stud.stud_id IN (:s_id);

当我输入 102 时,它返回:

+----------+----------+
|stud_id   |stud_name |
+----------+----------+
|102       |B         |
+----------+----------+

正如预期的那样。

有没有办法输入多个值,如 102,103,104 和这样的结果?

+----------+----------+
|stud_id   |stud_name |
+----------+----------+
|102       |B         |
|103       |C         |
|104       |D         |
+----------+----------+

您可以将regexp_substrconnect by一起使用。

SELECT * FROM students_tbl stud WHERE stud.stud_id IN 
(Select regexp_substr(:s_id,'[^,]+', 1,level)
From dual
Connect by regexp_substr(:s_id,'[^,]+', 1, level) is not null);

干杯!!

您不需要拆分绑定变量的值;更快的解决方案是查看 id(加上周围的分隔符(是否是绑定变量的子字符串(带有前导和尾随分隔符(:

select *
from   students_tbl
where  ','||:s_id||',' LIKE ','||stud_id||','

下面的查询将要求您输入 3 个输入值,您将获得所需的结果

SELECT * FROM students_tbl stud WHERE stud.stud_id IN (:s_id,:s_id1,:s_id2);

最新更新