使用SQL Server 2008检查select语句中的字符串

时间:2014-09-09 04:13:56

标签: sql sql-server

在这里,我需要检查格式为“a,c,e”的字符串。这种情况发生在用户从复选框中选择多个选项时,在查询中我需要使用当前列进行检查。

示例

给定字符串:

'a,c,e'

需要检查给定字符串每个单词是否存在于columnA列中:

columnA    columnB
-------------------
a            1
b            2
c            3
d            4
e            5
f            6
g            7
h            8

如果a,c,e列中出现columnA,则应使用columnB进行检索:

预期结果

columnA   columnB
------------------
a            1
c            3
e            5

我的尝试:

select columnA,columnB from 
test where columnA ='a' 
or columnA = 'c' 
or columnA = 'e'

我感觉不到!这是优化的方式。对于字符串值同时变化的动态查询,这也不好。

4 个答案:

答案 0 :(得分:2)

我不确定动态输入字符串的格式或columnA的格式,但您可以试试这个:

select columnA,columnB from 
test where CHARINDEX(columnA, 'a,c,e')>0

答案 1 :(得分:2)

尝试以下代码:

DECLARE @COMMASEPSTR NVARCHAR(200), @SQL nvarchar(max), @STR  nvarchar(100) = 'a,b,c'
 SET @COMMASEPSTR= '''' + REPLACE(@STR,',',''',''') + ''''

SET @SQL = 'select columnA,columnB from 
test where columnA IN ( ' + @COMMASEPSTR + ')'
EXEC sp_executesql @SQL

告诉我某处是否错了。

答案 2 :(得分:1)

您可以使用IN语法:

select columnA,columnB from 
test where columnA IN ('a','b','c')

答案 3 :(得分:0)

尝试让您的生活更轻松,将您的输入字符串放在select语句中的列之前。

declare @temp table
(
ColumnA NVARCHAR(MAX),
ColumnB NVARCHAR(MAX)
)


insert into @temp
select 'a','1'
union all
select 'b','2'
union all
select 'c','3'
union all
select 'd','4'
union all
select 'e','5'
union all
select 'f','6'
union all
select 'g','7'

DECLARE @input NVARCHAR(MAX) 
SET @input= 'a,d,c'

select * from @temp where @input like '%' + ColumnA +'%'