Oracle SQL三元运算符还是函数?

5

是否有类似于三目运算符或函数的简单Oracle语法?

以下语法可以正常工作:

with
function qry(v in varchar2) return varchar2 is
   begin
      return owa_util.ite(v like ('%' || lower('something') || '%'),'Y','N');
   end;
select * from my_table where qry(my_col) = 'Y'

with
function qry(v in varchar2) return varchar2 is
   begin
      return case when v like('%' || lower('something') || '%') then 'Y' else 'N' end;
   end;
select * from my_table where qry(my_col) = 'Y'

如果有更简单、更短的语法,我想知道。


3
你想做什么?提供样本数据、期望结果和清晰解释将会有所帮助。既然 like 已经足够简单,为什么还需要一个函数呢? - Gordon Linoff
我正在尝试像代码中一样,检查字符串是否匹配并返回 YN。我希望有比 if X then return A else return B end if 更短的方法。 - user5507535
你可以使用 case 表达式。 - Gordon Linoff
1个回答

6
您可以使用带有LIKECASE表达式:
SELECT *
FROM   my_table
WHERE  CASE WHEN my_col LIKE '%something%' THEN 'Y' ELSE 'N' END = 'Y';

或者使用DECODEINSTR函数:

SELECT *
FROM   my_table
WHERE  DECODE( INSTR( my_col, 'something' ), 0, 'N', 'Y' ) = 'Y';

或者只需简单地使用 LIKE

SELECT *
FROM   my_table
WHERE  my_col LIKE '%something%';

INSTR:

SELECT *
FROM   my_table
WHERE  INSTR( my_col, 'something' ) > 0;

或者REGEXP_LIKE

SELECT *
FROM   my_table
WHERE  REGEXP_LIKE( my_col, 'something' );

db<>fiddle 这里


好的,但我想把它放在一个函数中,因为这段代码将在许多地方重复使用,所以我不能使用DECODE - user5507535
@user5507535,你真的不需要一个函数;只需按照第三个示例使用LIKE即可。如果将其包装在函数中,则Oracle将不会使用您在该列上拥有的任何索引。 - MT0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接