2

我想搜索我的响应字段以查找美元符号 $ 后面没有数字值的任何实例。数值前 1 或 2 个空格是可以的,但 $ 后面不应有任何文本值。

我有以下查询:

SELECT * FROM RESPONSES
WHERE (regexp_like(response, '(\$)(\s){1,2}[^0-9]'));

这应该能够识别具有“$ NA”的响应。大多数响应将包含 $ 后跟数字值和 $ 文本值的组合。

我已经尝试了上述查询的几种变体,但均未成功。有什么想法吗?

4

3 回答 3

0

你可以使用这个:

SELECT  *
FROM dual
WHERE
SIGN(REGEXP_INSTR (RESPONSE, '(\$)(\s){2}[^0-9]'))=0 
于 2018-02-01T04:23:47.997 回答
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
于 2018-02-01T06:41:19.923 回答
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

演示

于 2018-02-01T05:07:00.693 回答