SQL CASE LIKE 多选

SQL CASE LIKE with multiple choices

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

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 中找不到如何使用它们。

你怎么看待这个问题?

我认为您将 SQL 用于并非其设计用途的用途。拥有如此多的类似语句将导致您的查询完全破坏 SQL 服务器上的资源,并且当您获得比演示数据库更多的行时,您将拥有一个让您的用户哭泣的运行时。

如果您需要此类信息,您需要尝试以下操作之一:

1.Make 新列用于存储您要提取的数据,并编写更新语句以解析出该数据。例如,如果您有像 'warning%' 这样的 case 文本,则创建一个 isWarning 位列,或者一个 varchar 类型并在其中存储 'Warning'

  1. Select 从没有 case/like 的数据库返回的数据,然后在您的业务代码中执行该查找

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

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

更新:
如果一个类别中有子字符串,请向此查询添加 DISTINCT

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