gpt4 book ai didi

sql - 在 Oracle 的 CASE/THEN 中使用 LIKE?

转载 作者:行者123 更新时间:2023-12-05 01:03:15 24 4
gpt4 key购买 nike

我有这部分代码

WHERE p.id = m.id AND (
CASE
WHEN (c.match_text IS NOT NULL)
THEN (
(lower(p.station) LIKE '%'||c.match_text||'%')
OR
(
(lower(p.station) LIKE '%sealed in%')
AND
(lower(p.affected_units) LIKE '%'||c.match_text||'%')
)
)
WHEN(u.name LIKE '%Memory%')
THEN (
(lower(p.affected_fuels) LIKE '%nuclear%')
AND

我在这个 (lower(p.station) LIKE '%'||c.match_text||'%') 中遇到 LIKE 错误!!

这是为什么呢?

我认为这种方法可以解决问题:

WHEN (c.match_text IS NOT NULL)
THEN (
CASE WHEN
(lower(p.station) LIKE '%'||c.match_text||'%')
OR
(
(lower(p.station) LIKE '%sealed in%')
AND
(lower(p.affected_units) LIKE '%'||c.match_text||'%')
)
THEN true
ELSE false
END
)

谢谢

最佳答案

CASE() 基本上是一个翻译器:它为给定的一组条件返回一个值。您遇到的问题是您试图强制它返回一个 BOOLEAN 值。这不起作用,因为 BOOLEAN 不是有效的 SQL 数据类型。

所以我认为您必须将逻辑实现为嵌套的 AND/OR 子句。这有点粗糙,但并不比你原来的陈述复杂多少。像这样的:

WHERE p.id = m.id 
AND (
( c.match_text IS NOT NULL
AND ( lower(p.station) LIKE '%'||c.match_text||'%'
OR ( lower(p.station) LIKE '%sealed in%'
AND lower(p.affected_units) LIKE '%'||c.match_text||'%'
)
)
)
OR (u.name LIKE '%Memory%'
AND lower(p.affected_fuels) LIKE '%nuclear%'
AND ...

关于sql - 在 Oracle 的 CASE/THEN 中使用 LIKE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9376290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com