如何使用CASE/IF(SQL查询)检查列中是否包含子字符串

4
我需要根据特定条件返回两个值中的一个: 我的不同情况是: 当一个列在右侧拥有“子字符串”时,返回该列。(即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

还有一些涉及到外键的表1/表2之间的更多连接...结果总是从“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
1个回答

6

需要使用:

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数据类型也相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接