我有一个选择语句,我使用IN条件,在IN条件内,我有一个字符串…如何忽略单引号?
Select * from employ where id = 12 and org_id in ({$id})
$id = '12,13'
谢谢
in
与collections
一起使用,因此您的输入字符串首先应转换为collection
(通过基于逗号分隔符的分行)
试试这样
Select * from employ where id = 12 and org_id in (
SELECT decode(:input_id,null, (select employ.org_id from dual)
,TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)) )
FROM (SELECT :input_id temp FROM DUAL)
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
)
顺便说一下,如果:input_id
是null
,这个org_id in ()
将返回true
。
另一种方法是首先将整个查询构造为字符串,然后使用execute immediate
或通过php
执行。然而,这可能会引起sql注入问题。
我猜您想处理一个列表。不幸的是,SQL不允许参数是一个列表,所以你必须做更多的工作。
一种方法使用like
(或正则表达式):
Select *
from employ
where id = 12 and
',' || org_id || ',' like '%,' || {$id} || ',%';
如果性能是一个问题,并且您希望使用索引,则可能需要研究其他选项。最简单的方法是省略参数,只修改查询字符串(使用动态SQL执行查询)。