SQL - 无法在两列中找到部分匹配的数据

时间:2018-01-24 19:08:30

标签: sql case sql-like

我之前从未发过帖,我通常能够找到答案,所以如果我排除任何内容或格式不正确,请耐心等待。这是我的问题:

我有两列包含类似数据,例如:

Column1            Column2
BASKETBALL         BasketBall-CAVS
BASEBALL REDS      Baseball-SPORTS

我没有搜索特定的单词,只要在两列中找到的任何单词都应填充第三列下的“否”。所以上述两个记录都应该返回NO。我试过这个:

CASE
WHEN Column1 NOT LIKE 
CONCAT('%',Column2,'%') THEN 'Yes' 
ELSE 'No'
END AS Needs_Updated;

出于某种原因,只有上图中的第一条记录在“Needs_Updated”列中返回“否”。第二条记录返回“是”(这是不正确的,该列中有两个单词匹配)。第二个记录的唯一区别是第1列中有多个单词。任何人都可以帮助我吗?提前谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你可以用正则表达式做你想做的事。并非所有数据库都支持它们,因此这些数据库非常棘手。

使用MySQL语法:

select t.*,
       (case when column2 regexp replace(column1, ' ', '|') then 'no' else 'yes' end) as needs_updated
from t;

答案 1 :(得分:1)

你有没有试过Charindex

SELECT  CASE WHEN CHARINDEX(Column2,Column1) > 0 ) THEN 'NO' ELSE 'YES'  AS Needs_Updated


CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ])

start_location是可选的

https://github.com/mathiasbynens/CSS.escape