簡體   English   中英

將字符串傳遞給條件中的SQL語句

[英]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了解更多詳細信息。

鏈接以獲取有關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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM