【问题标题】:ms sql server string compare to another string with multiple valuems sql server字符串与另一个具有多个值的字符串进行比较
【发布时间】:2014-03-08 14:25:50
【问题描述】:

MS SQL Server Input Column 1 Cat 1 包含多个用空格分隔的值,Cat2 包含要比较的值。如果 Cat2 值与 Cat1 中的任何一个值匹配,则所需的输出列应为 1,如果不匹配,则应为 0。分隔符是一个空格。类似 -- answer = 1 if Cat1=In (cat2) 后用逗号替换空格,但我不明白完成此操作的语法。谁能帮我解决这个问题。提前致谢。

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  

开发

【问题讨论】:

  • 抱歉 - 表格的格式搞砸了。
  • 样本数据缺少 Cat1 = "8 4 6 36 a b"、Cat2 = "3" 和 OUTPUT = "0" 的测试用例。解决方案不应允许仅“3”匹配“36”中的“3”的情况,这不是有效匹配。

标签: sql-server string compare


【解决方案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 |

【讨论】:

  • 在您将空格分隔符添加到 3 个 LIKE 条件中的每一个的“%”中之前,此解决方案实际上不会起作用。第一个条件是 '%' + Cat2,最后一个条件是 Cat2 + '%',中间条件包括这两个变化。如果没有这个,只有“3”的测试用例将匹配“36”中的“3”,但这不是一个有效的匹配。样本数据缺少 Cat1 = "8 4 6 36 a b"、Cat2 = "3" 和 OUTPUT = "0" 的测试用例。
  • @srutzky 感谢您指出这一点,我已经解决了这个问题 :) 非常感谢。
  • 非常感谢 srutzky 能够正确识别问题,即使它(我)解释得不好,也非常感谢我把它变成一张桌子和 M. ali 回答它。你是最棒的!
  • 没问题,很高兴它有帮助:)
  • 是的 - 确实缺少我添加的几个测试用例
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 2013-01-20
相关资源
最近更新 更多