[英]Pass String to SQL Statement In Condition
我有一個字符串,其值具有以下格式
A , B, C
我需要將此傳遞給SQL語句的條件為
SELECT * FROM mytable
WHERE colname in ('A','B','C')
我怎樣才能做到這一點? 我沒有使用PreparedStatement,正在使用普通SQL。
在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 )
您可以使用如下所示的內容,
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了解更多詳細信息。
您可以創建一個存儲過程,並使用此過程將字符串拆分為一個表:
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編寫的。
您可以使用執行字符串。
MSSql語法:
DECLARE myColumns @String NVARCHAR(4000) = 'A,B,C';
EXECUTE 'SELECT '+ myColumns +' FROM mytable '
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.