SQL CASE LIKE有多个选择

时间:2015-05-15 10:33:50

标签: sql sql-server tsql case sql-like

在我的查询中,我有以下部分代码:

CASE WHEN Field1 LIKE '%choice1%' OR Field1 LIKE '%Choice1%' .... THEN 'category 1'
     WHEN Field1 LIKE '%choicea%' OR Field1 LIKE '%Choiceb%' .... THEN 'category 2'
END AS 'Cats'

我有很多选择(1行约20),(2行约15和儿子)。

我可以做些什么来使我的代码更清晰,我通常使用IN的东西吗?

示例:

CASE WHEN Field1 IN LIKE ('%choice1'.'%choice2%',...) THEN 'category 1'
     WHEN Field1 IN LIKE ('%choicea'.'%choiceb%',...) THEN 'category 2'
END AS 'Cats'

P.S。我听说我可以以某种方式使用那些||,但我在google中找不到如何使用它们。

您如何看待这个问题?

3 个答案:

答案 0 :(得分:4)

如果已知这些选项,请将它们放在表格中并使用连接:

SELECT Field1, c.Category
FROM MainTable 
LEFT JOIN Choices c ON Field1 LIKE ('%' + c.Choice + '%')

<强>更新
如果一个类别中有子字符串,请在此查询中添加DISTINCT

答案 1 :(得分:0)

我认为您使用SQL是为了它而设计的。拥有许多类似的语句将导致您的查询绝对破坏SQL服务器上的资源,当您获得的行数多于演示数据库时,您将拥有一个让您的用户哭泣的运行时。

如果您需要此类信息,则需要尝试以下方法之一:

1.创建新列以存储您要提取的数据,并编写更新语句以解析说明。例如,如果您有案例文本,例如警告%&#39;创建一个isWarning位列,或类型varchar并存储&#39;警告&#39;在其中

  1. 在没有案例/喜欢的情况下从数据库中选择数据,然后在您的业务代码中执行该查找

答案 2 :(得分:0)

如果你的逻辑仍然适用于完全匹配,你可以尝试使用decode()函数,我知道Oracle DB支持它:http://psoug.org/reference/decode_case.html

相关问题