【问题标题】:How to check for a substring in a column, using CASE /IF (SQL querying)如何使用 CASE /IF(SQL 查询)检查列中的子字符串
【发布时间】:2010-08-03 22:21:26
【问题描述】:

对于某些条件,我需要返回 2 个值之一: 我的不同情况是: 当一列的右端有“子字符串”时,返回该列。 (即 LIKE '%substring') 否则返回其他列(来自其他表)

这行得通:

SELECT * From Table1 where col1 is not null and col1 like '%substring'

但是,这不起作用:

SELECT col5,
CASE Table1.Col1 
   WHEN NULL Then Table2.Col2
   WHEN '%substring' THEN Table1.Col1
   ELSE Table2.Col2
 FROM Table1
 JOIN Tablex ON Tablex.colID= Tabley.colID
 JOIN Table1 ON Table1.colID = Tablex.colID

还有一堆更多的连接,用于使用 table1/table2 的外键相互关联的表... 结果总是从“else”部分返回。

我也试过了,还是不行:

SELECT col5,
CASE Table1.Col1 
   WHEN NULL Then Table2.Col2
   WHEN '' THEN Table2.Col2
   ELSE Table1.col1
 FROM Table1
 JOIN Tablex ON Tablex.colID= Tabley.colID
 JOIN Table1 ON Table1.colID = Tablex.colID

【问题讨论】:

    标签: sql sql-server tsql case


    【解决方案1】:

    需要使用:

    SELECT col5,
           CASE 
             WHEN Table1.Col1 IS NULL Then Table2.Col2
             WHEN Table1.Col1 LIKE '%substring' THEN Table1.Col1
             ELSE Table2.Col2
           END
    FROM Table1
    JOIN Tablex ON Tablex.colID= Tabley.colID
    JOIN Table1 ON Table1.colID = Tablex.colID
    

    CASE/WHEN 表达式等价于“=”,因此指定 NULL 将永远无法正确计算,因为您需要使用 IS NULL。同样,不能假设正在使用 LIKE...

    您还缺少 END 关键字来表示 CASE 表达式的结束。

    注意Table2.Col2Table1.Col1 数据类型也是相同的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多