在我的查询中,我有以下部分代码:
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中找不到如何使用它们。
您如何看待这个问题?
答案 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;在其中
答案 2 :(得分:0)
如果你的逻辑仍然适用于完全匹配,你可以尝试使用decode()函数,我知道Oracle DB支持它:http://psoug.org/reference/decode_case.html。