where子句中的Oracle SQL逗号分隔参数
我的桌子看起来像:where子句中的Oracle SQL逗号分隔参数,sql,oracle,Sql,Oracle,我的桌子看起来像: +----------+----------+ |stud_id |stud_name | +----------+----------+ |101 |A | |102 |B | |103 |C | |104 |D | |105 |E | +----------+----------+ 我的问题 SELECT * FROM stud
+----------+----------+
|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 |
+----------+----------+
正如所料
是否有一种方法可以输入多个值(如102103104)和这样的结果
+----------+----------+
|stud_id |stud_name |
+----------+----------+
|102 |B |
|103 |C |
|104 |D |
+----------+----------+
您可以将regexp\u substr与connect by一起使用
干杯 下面的查询将要求您输入3个值,您将得到所需的结果
SELECT * FROM students_tbl stud WHERE stud.stud_id IN (:s_id,:s_id1,:s_id2);
您不需要拆分bind变量的值;一个更快的解决方案是查看id加上周围的分隔符是否是bind变量的子字符串,其中包含前导和尾随分隔符: 挑选* 来自学生 其中“,”s|id“,”LIKE“,”stud|id“,”
非常类似于我刚才指出的,这个构造阻止您在stud_id上使用索引。如果表中有几百个学生,可能并不重要。但是,如果表中有几十万名学生,那么这将变得昂贵。如果您真的想这样做,您可以将:s_id作为数字表传递,并使用WHERE stud_id成员:s_id。
SELECT * FROM students_tbl stud WHERE stud.stud_id IN (:s_id,:s_id1,:s_id2);