检查另一列是否包含列值

时间:2016-01-27 13:31:53

标签: sql sql-server sql-server-2008

我在SQL中有一个名为Host的表,如下所示。

**FirstName**   **LastName**
 Krishna          Krishna Murthy
 Jithendra        Jithendra Reddy
 Varun            Varun Kumar
 Mahendra         Varma

如果firstname列是LastName列的一部分,我需要再创建一个值为yes / No的列。 输出应如下

**FirstName**   **LastName**        **Subset**
 Krishna          Krishna Murthy      Yes
 Jithendra        Jithendra Reddy     Yes
 Varun            Varun Kumar         Yes
 Mahendra         Varma               No

任何想法?

3 个答案:

答案 0 :(得分:1)

您可以使用

SELECT FirstName, LastName, 
    CASE WHEN LastName LIKE '%' + FirstName + '%' 
    THEN 'Yes' ELSE 'No' 
    END AS Flag
FROM host

获得您正在寻找的结果。

如果您只想搜索重复使用forename的情况,您可能需要将大小写调整为LastName LIKE FirstName + ' %'以确保它仅匹配至少有两个单词的位置,并且第一个位于FirstName中,例如

**FirstName**   **LastName**        **Subset**
Bob             Bobbins             No
SingleName      SingleName          No
AAA             BBB AAA             No

答案 1 :(得分:0)

您可以使用like。在标准SQL中,这看起来像:

select h.*,
       (case when h.lastname like concat('%', h.firstname, '%')
             then 'yes' else 'no'
        end) as flag
from host h;

请注意,大多数数据库都支持字符串连接的运算符,例如||+

答案 2 :(得分:0)

在表格中添加列。使用下面的UPDATE语句填写现有记录,不区分大小写。

UPDATE host
SET subset = CASE WHEN instr(lower(surname), lower(forename)) > 0 THEN 'Yes' ELSE 'No' END
/