ms sql server string与另一个具有多个值的字符串进行比较

时间:2014-03-08 14:25:51

标签: sql-server string compare

MS SQL Server输入列1 Cat 1包含由空格分隔的多个值,Cat2包含要比较的值。如果Cat2值与Cat1中的任何一个值匹配,则所需输出列应为1,如果不匹配,则所需输出列应为0。分隔符是一个空间。有点像 - 如果用逗号替换空格后Cat1 = In(cat2),则回答= 1,但我不理解完成此操作的语法。任何人都可以帮助我。提前谢谢。

DECLARE @TABLE TABLE(Cat1 VARCHAR(50),Cat2 VARCHAR(50), answer VARCHAR(50))
INSERT INTO @TABLE VALUES
('3 4 6 36 a b','36','1'),
('5 4 6 36 a b','3','0'),
('7 5 6 46 a b','4','0'),
('7 5 6 46 a b','5','1'),
('3 4 6 36 a b','7','0')
select cat1, cat2 , answer
FROM @TABLE

Cat1                        Cat2             output
3 4 6 36 a b                 36                 1
3 4 6 36 a b                 3                  1 
3 4 6 36 a b                 4                  1
3 4 6 36 a b                 7                  0  

开发

1 个答案:

答案 0 :(得分:1)

SQL Fiddle

MS SQL Server 2008架构设置

CREATE TABLE Test_Table(Cat1 VARCHAR(50),Cat2 VARCHAR(50))
INSERT INTO Test_Table VALUES
('3 4 6 36 a b','36'),
('3 4 6 36 a b','3'),
('3 4 6 36 a b','4'),
('3 4 6 36 a b','7'),
('8 4 6 36 a b','b')

查询1

SELECT *
      ,CASE WHEN  Cat1  LIKE '% '+ Cat2
            OR    Cat1  LIKE '% '+ Cat2+ ' %'
            OR    Cat1  LIKE       Cat2+ ' %'
              THEN 1
         ELSE 0 
       END AS [OUTPUT]
FROM Test_Table 

<强> Results

|         CAT1 | CAT2 | OUTPUT |
|--------------|------|--------|
| 3 4 6 36 a b |   36 |      1 |
| 3 4 6 36 a b |    3 |      1 |
| 3 4 6 36 a b |    4 |      1 |
| 3 4 6 36 a b |    7 |      0 |
| 8 4 6 36 a b |    b |      1 |