在这里,我需要检查格式为“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'
我感觉不到!这是优化的方式。对于字符串值同时变化的动态查询,这也不好。
答案 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 +'%'