问题
I need a case statement that allows partial matches. I get a syntax error, but am wondering if anything similar to this is possible. If not, my secondary solution is to re-write as a cursor... Example:
SELECT CASE ColumnName
WHEN 'value1' THEN 'answer1'
WHEN 'value2' THEN 'answer2'
WHEN LIKE '%TEST%' THEN 'answer3'
END AS Answer
FROM TableName
回答1:
try this
SELECT CASE
WHEN ColumnName = 'value1' THEN 'answer1'
WHEN ColumnName = 'value2' THEN 'answer2'
WHEN ColumnName LIKE '%TEST%' THEN 'answer3'
END AS Answer
FROM TableName
example you can run
SELECT name,CASE
WHEN Name = 'sysobjects' THEN 'answer1'
WHEN Name = 'syscols' THEN 'answer2'
WHEN Name LIKE '%p%' THEN 'answer3'
ELSE 'unknown'
END AS Answer
FROM sysobjects
回答2:
Need to use a slightly different CASE syntax:
SELECT CASE WHEN ColumnName LIKE 'value1' THEN 'answer1'
WHEN ColumnName LIKE 'value2' THEN 'answer2'
WHEN ColumnName LIKE '%TEST%' THEN 'answer3'
ELSE 'not like any of them' END [Answer]
FROM TableName
回答3:
Alternatively, you can nest CASE condition and CASE WHEN value clauses, like so:
SELECT CASE ColumnName
WHEN 'value1' THEN 'answer1'
WHEN 'value2' THEN 'answer2'
ELSE CASE WHEN ColumnName LIKE '%TEST%' THEN 'answer3' END
END AS Answer
FROM TableName
回答4:
You are using the "simple CASE expression" but you should be using the "searched CASE expression". See the documentation for some examples.
回答5:
In sql ORACLE 10
SELECT
CASE WHEN instr(ColumnName, 'value1')>0 THEN 'answer1'
WHEN instr(ColumnName,'value2')>0 THEN 'answer2'
WHEN instr(ColumnName,'TEST')>0 THEN 'answer3'
ELSE 'not like any of them'
END
FROM TableName
来源:https://stackoverflow.com/questions/7687717/sql-2005-can-i-use-keyword-like-in-a-case-statement