将字符串传递给条件中的SQL语句

时间:2016-11-14 12:11:39

标签: java sql oracle11g

我有一个字符串,其格式为以下格式

A , B, C

我需要将其传递给SQL语句,条件为

SELECT * FROM mytable 
WHERE colname in ('A','B','C')

我该怎么做? 我没有使用PreparedStatement,正在使用普通的SQL。

4 个答案:

答案 0 :(得分:2)

oracle中,您可以使用regexp_substr来实现此目的。见下文:

例如,输入字符串为'A,B,C'

这可以通过将逗号分隔的字符串拆分为单个字符串并将其传递给IN子句来实现。

首先,我们将形成一个查询,它将此逗号分隔的字符串拆分并将各个字符串作为行。

Select regexp_substr('A,B,C' ,'[^,]+', 1, level) from dual
                connect by regexp_substr('A,B,C' ,'[^,]+', 1, level is not null

上面的查询遍历逗号分隔的字符串,搜索逗号(,)然后通过将逗号视为分隔符来拆分字符串。只要它到达分隔符,它就会将字符串作为一行返回。

我们可以将此查询传递给select语句以获得所需的输出。

SELECT * FROM mytable 
WHERE colname in (
                Select regexp_substr('A,B,C' ,'[^,]+', 1, level) from dual
                connect by regexp_substr('A,B,C' ,'[^,]+', 1, level) is not null )

答案 1 :(得分:1)

您可以使用如下所示的内容,

select * from mytable where col like 'A%'
union
select * from mytable where col like 'B%'
union
select * from mytable where col like 'C%';

您还可以查看oracle 10g REGEXP_LIKE以获取更多详细信息。

Link for more Details on REGEXP_LIKE

答案 2 :(得分:1)

您可以创建存储的进程,并使用它将字符串拆分为表:

CREATE FUNCTION [dbo].[stringSplit]
(
    @String NVARCHAR(4000),
    @Delimiter NCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
    WITH Split(stpos,endpos)
    AS(
        SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
    UNION ALL
    SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
        FROM Split
        WHERE endpos > 0
)
SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
    'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
FROM Split
)

然后您可以像这样查询数据:

SELECT * FROM mytable 
WHERE colname in (SELECT DATA FROM dbo.stringSplit(colname, ','))

此解决方案是为MS SQL编写的。

答案 3 :(得分:1)

您可以使用执行字符串。

MSSql语法:

DECLARE  myColumns  @String NVARCHAR(4000) = 'A,B,C';

EXECUTE 'SELECT '+ myColumns +' FROM mytable '