如何通过新列标注 A 列和 B 列之间是不是匹配

Posted

技术标签:

【中文标题】如何通过新列标注 A 列和 B 列之间是不是匹配【英文标题】:How to notate if there is matching between column A and column B via a new column如何通过新列标注 A 列和 B 列之间是否匹配 【发布时间】:2020-07-01 19:39:54 【问题描述】:

我的查询结果如下:

ColumnX      ColumnY          
 apple     the apple is red   
 orange    orange tree is tall
 berry      the sky is blue   

基本上想创建一个新列,检查是否在表示为“是”或“否”的 ColumnY 中找到 ColumnX 值:

 ColumnX      ColumnY               newColumn       
 apple     the apple is red            Yes
 orange    orange tree is tall         Yes
 berry      the sky is blue            No

我尝试过类似的方法:

case 
   when ColumnX like '%' + ColumnY + '%' then "Yes"
end as newColumn

无济于事。

【问题讨论】:

【参考方案1】:

你想要like 操作数反过来。此外,您应该使用单引号而不是双引号来定义字符串文字。

所以:

select
    t.*,
    case when columnY like '%' + columnX + '%'
        then 'Yes'
        else 'No'
    end newColumn
from mytable t

你也可以使用charindex():

case when charindex(columnX, columnY) > 0 then 'Yes' else 'No' end

【讨论】:

【参考方案2】:

你可以使用以下

SELECT *, CASE WHEN ColY LIKE CONCAT('%', ColX, '%')
               THEN 'Yes'
               ELSE 'No'
          END NewColumnUsingLike,
          CASE WHEN PATINDEX(CONCAT('%', ColX, '%'), ColY) > 0
               THEN 'Yes'
               ELSE 'No'
          END NewColumnUsingPatIndex,
          CASE WHEN CHARINDEX(ColX, ColY) > 0
               THEN 'Yes'
               ELSE 'No'
          END NewColumnUsingCharIndex
FROM
(
  VALUES
  ('apple',     'the apple is red'),   
  ('orange',    'orange tree is tall'),
  ('berry',     'the sky is blue')
) T(ColX, ColY);

Online Demo

【讨论】:

以上是关于如何通过新列标注 A 列和 B 列之间是不是匹配的主要内容,如果未能解决你的问题,请参考以下文章

在数据中添加新列和行时 Excel 会自动更新图表

A 列和 B 列之间的流差由 C 列和 D 列汇总

如何识别两个数据矩阵之间的哪些列和行匹配?

通过在两个现有列上使用 lambda 函数在 Panda 中创建一个新列

PL-SQL 操作列和插入

Pandas列表的列,通过迭代(选择)三列的每个列表元素作为新列和行来创建多列[重复]