我有这个疑问
select
documentat2_.*
,case
when (
REGEXP_LIKE(documentat2_.VALUE,'^(\\*)$')
) then 1
else 0
END AS x
from
DOCUMENT_ATTRIBUTE_BANK documentat1_
inner join
DOCUMENT_ATTRIBUTE documentat2_
on documentat1_.DOCUMENT_ATTRIBUTE_ID=documentat2_.DOCUMENT_ATTRIBUTE_ID
where
exists (
select
documenten0_.DOCUMENT_ID as document_id2_8_
FROM
DOCUMENT documenten0_
where
documenten0_.APPLICATION_CODE='xxx' AND
documentat1_.DOCUMENT_ID=documenten0_.DOCUMENT_ID
and documentat1_.DOCUMENT_VERSION=documenten0_.DOCUMENT_VERSION
)
and documentat1_.DOCUMENT_VERSION=16
and documentat1_.BANK_ID='xxxx'
and documentat2_.CHECKLIST_ID=7
and documentat2_.NAME='NEW'
AND documentat2_.VALUE='*'
查询选择与字段
VALUE=' * '
匹配的记录,它工作正常,但是REGEXP_LIKE
返回0
!我的期望是1
,而不是0
!它适用于 REGEXP_LIKE(documentat2_.VALUE,'(\\ *)')
但不适用于
REGEXP_LIKE(documentat2_.VALUE,'^(\\ *)$')
,为什么?
在其他情况下 REGEXP_LIKE(documentat2_.VALUE, '^(NO)$|^(\\*)$')
它可以工作,因为某些记录的值带有 "NO"
,而另一些记录则带有 "*"
。我想字段中没有空格,所以我不明白为什么它会这样工作?
出了什么问题,还是我错了? 我很困惑..
谢谢
^(\\*)$
匹配:
^
(
\
反斜杠字符 \\*
)
$
。它与
*
字符不匹配。
如果您想匹配
*
,请使用单个反斜杠来转义 *
字符:
select documentat2_.*
, case
when (REGEXP_LIKE(documentat2_.VALUE,'^\*$'))
then 1
else 0
END AS x
from -- ...
DOCUMENT_ATTRIBUTE documentat2_
where -- ...
documentat2_.VALUE='*'
对于样本数据:
CREATE TABLE DOCUMENT_ATTRIBUTE (value) AS
SELECT '*' FROM DUAL UNION ALL
SELECT ' * ' FROM DUAL UNION ALL
SELECT 'NO' FROM DUAL;
输出:
价值 | X |
---|---|
* | 1 |