我想搜索我的响应字段,以查找美元符号$后面没有数字值的任何实例。在数值正确之前有1或2个空格,但不应该是$之后的任何文本值。
我在下面有以下查询:
SELECT * FROM RESPONSES
WHERE (regexp_like(response, '(\$)(\s){1,2}[^0-9]'));
这应该能够识别具有" $ NA"的响应。大多数回复都包含$的组合,后跟数值和$的文本值。
我尝试了上述查询的几种变体而没有任何成功。有什么想法吗?
答案 0 :(得分:0)
SELECT *
FROM dual
WHERE
SIGN(REGEXP_INSTR (RESPONSE, '(\$)(\s){2}[^0-9]'))=0
答案 1 :(得分:0)
您可以使用:
select * from responses where regexp_like(a, '^\$\s')
获取值以$
符号开头,后跟至少一个空格作为连续字符。
with t as
(
select '$ 524' as a from dual union all
select '$524' as a from dual union all
select '$ s67e' as a from dual union all
select '# 67e' as a from dual union all
select '$s67e' as a from dual union all
select '$#67e' as a from dual
)
select * from t where regexp_like(a, '^\$\s')
A
----
$ 524
$ s67e
答案 2 :(得分:0)
在您的否定字符集中包含空格字符
由于空格字符有资格作为非数字字符,因此第二个空格可以产生误报"对于您要查找的数据集。
SCOTT@db>WITH smple AS (
2 SELECT
3 '23 dkf $ 1' response
4 FROM
5 dual
6 UNION ALL
7 SELECT
8 '23 dkfg gjg $ 4'
9 FROM
10 dual
11 UNION ALL
12 SELECT
13 '$ NA'
14 FROM
15 dual
16 ) SELECT
17 s.*
18 FROM
19 smple s
20 WHERE
21 ( REGEXP_LIKE ( s.response,
22 '\$\s{1,2}[^ 0-9]+' ) );
RESPONSE
----------
$ NA