如何使用CASE/IF(SQL查询)检查列中的子字符串

Los*_*der 4 sql t-sql sql-server case

我需要为某些条件返回2个值中的一个:我的不同情况是:当一列在右端有'substring'时,返回该列.(即LIKE'%substring')否则返回其他列(来自其他表)

这有效:

SELECT * From Table1 where col1 is not null and col1 like '%substring'
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用:

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
Run Code Online (Sandbox Code Playgroud)

和一些具有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
Run Code Online (Sandbox Code Playgroud)

OMG*_*ies 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
Run Code Online (Sandbox Code Playgroud)

CASE/WHEN表达式等价于"=",因此指定NULL将永远不会正确评估,因为您需要使用IS NULL.同样,不能假设正在使用LIKE ......

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

介意Table2.Col2Table1.Col1数据类型是相同的了.