我的表看起来像:
+----------+----------+
|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_substr
与connect 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);