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'
- 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。
在我的查询中,我有以下部分代码:
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'
- 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。