gpt4 book ai didi

sql - 如何在 CASE 语句中使用 REGEXP_LIKE?

转载 作者:行者123 更新时间:2023-12-01 09:59:02 27 4
gpt4 key购买 nike

我想在我的 CASE 语句中使用 REGEXP_LIKE

2 个问题

  1. 如何让 REGEXP_LIKE 在此 CASE 语句中起作用?我收到以下错误消息ORA-00904:“TRUE”:标识符无效

  2. 关于正则表达式,为什么 select '12345678' from dual 查询返回 1

正则表达式规则

0到6位数字,后跟0或1个小数点,再跟0到6位数字。

with expression_row as 
(select 'zzzz' as expression from dual union all
select '12345678' as expression from dual union all
select '12.33333' as expression from dual union all
select '.222222' as expression from dual)
select
expression,
case regexp_like( expression, '^\d{0,6}(\.{0,1}\d{0,6})$')
-- [0-6 digits][0-1 decimal][0-6 digits]
when TRUE then 'Y'
else 'N'
end as valid_y_n
from expression_row;

期望的输出

zzzz     N
12345678 N
12.33333 Y
.222222 Y

我正在使用此查询验证我的正则表达式模式。

select 1 as valid from dual 
where regexp_like( '12345678', '^\d{0,6}\.{0,1}\d{0,6}$');

最佳答案

1) 试试下面的代码——不是正则表达式错了,而是它所在的位置错了。在评估表达式时,SQL 以与大多数语言不同的方式工作——它不会返回 true,然后将其与其他值进行比较;您需要将返回 true 的条件放在需要条件或值的地方。

with expression_row as 
(select 'zzzz' as expression from dual union all
select '12345678' as expression from dual union all
select '12.33333' as expression from dual union all
select '.222222' as expression from dual)
select
expression
,case
when regexp_like( expression, '^\d{0,6}(\.{0,1}\d{0,6})$') -- [0-6 digits][0-1 decimal][0-6 digits]
then 'Y'
else 'N'
end as valid_y_n
from expression_row;

2) 1 在 SQL 中代表 TRUE; 0 为假。这是因为 SQL 使用位而不是 bool 值(尽管从逻辑角度来看它们是相同的)。

关于sql - 如何在 CASE 语句中使用 REGEXP_LIKE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19506359/

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