下面是我的查询,我将字符串值 1,2 作为绑定值传递,但它显示错误,因为它不是有效数字。我知道 IN 只接受数字,但在这里我需要传递字符串值
SELECT e.*
FROM employee_detail e
WHERE e.emp_id IN (:emp_id)
下面是我的查询,我将字符串值 1,2 作为绑定值传递,但它显示错误,因为它不是有效数字。我知道 IN 只接受数字,但在这里我需要传递字符串值
SELECT e.*
FROM employee_detail e
WHERE e.emp_id IN (:emp_id)
您可以使用字符串比较而不是 IN 条件。
select ...
from ...
where ',' || :emp_id || ',' like '%,' || to_char(emp_id) || ',%'
;
In
与list of values
or一起使用subqueries
。
您可以使用以下技巧将逗号分隔string
为, :subquery
SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level))
FROM (SELECT :emp_id temp FROM DUAL)
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
在这里,1,2,3
字符串将被转换为subquery
返回3
行。
因此,对于您的情况,最终结果可能是这样的:
SELECT e.*
FROM employee_detail e
WHERE e.emp_id in (
SELECT decode(:emp_id,null, (select e.emp_id from dual)
,TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)) )
FROM (SELECT :emp_id temp FROM DUAL)
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+'))
请注意,在这种情况下 In
将返回true
if :emp_id
is并且这是通过使用函数null
故意实现的。decode