我想搜索我的响应字段以查找美元符号 $ 后面没有数字值的任何实例。数值前 1 或 2 个空格是可以的,但 $ 后面不应有任何文本值。
我有以下查询:
SELECT * FROM RESPONSES
WHERE (regexp_like(response, '(\$)(\s){1,2}[^0-9]'));
这应该能够识别具有“$ NA”的响应。大多数响应将包含 $ 后跟数字值和 $ 文本值的组合。
我已经尝试了上述查询的几种变体,但均未成功。有什么想法吗?
我想搜索我的响应字段以查找美元符号 $ 后面没有数字值的任何实例。数值前 1 或 2 个空格是可以的,但 $ 后面不应有任何文本值。
我有以下查询:
SELECT * FROM RESPONSES
WHERE (regexp_like(response, '(\$)(\s){1,2}[^0-9]'));
这应该能够识别具有“$ NA”的响应。大多数响应将包含 $ 后跟数字值和 $ 文本值的组合。
我已经尝试了上述查询的几种变体,但均未成功。有什么想法吗?
SELECT *
FROM dual
WHERE
SIGN(REGEXP_INSTR (RESPONSE, '(\$)(\s){2}[^0-9]'))=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
您可以使用:
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