我有一个字符串,其格式为以下格式
A , B, C
我需要将其传递给SQL语句,条件为
SELECT * FROM mytable
WHERE colname in ('A','B','C')
我该怎么做? 我没有使用PreparedStatement,正在使用普通的SQL。
答案 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以获取更多详细信息。
答案 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 '