我有一个select语句,我使用IN条件,在IN条件中我有一个字符串...我怎么能忽略单引号?
Select * from employ where id = 12 and org_id in ({$id})
$id = '12,13'
由于
答案 0 :(得分:1)
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, '[^,]+')
)
顺便说一句,如果org_id in ()
为true
,则此:input_id
将返回null
。
另一种方法将首先将整个查询构造为字符串,然后使用execute immediate
或php
执行。然而,这可能引起sql injection关注。
答案 1 :(得分:0)
我猜你要处理一个清单。不幸的是,SQL不允许参数成为列表,所以你必须做更多的工作。
一种方法使用like
(或正则表达式):
Select *
from employ
where id = 12 and
',' || org_id || ',' like '%,' || {$id} || ',%';
如果性能问题且您想使用索引,则可能需要调查其他选项。最简单的方法是省去参数并只修改查询字符串(使用动态SQL来执行查询)。