Oracle使用REGEXP_LIKE标识多个空格

时间:2017-09-01 10:30:23

标签: sql oracle

我正在尝试识别评论中包含多个空格的字段,例如'this lhas three spaces'

使用这个我可以获得两个空格的任何东西,但希望能够获得2个或更多:

select * from labtec.spaces
where REGEXP_LIKE(SPACES, '[[:space:]]{2}');

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

where REGEXP_LIKE(SPACES, '[[:space:]][[:space:]]+');

答案 1 :(得分:1)

我相信你可以:

select * from labtec.spaces
where REGEXP_LIKE(SPACES, '[[:space:]]{2,}');

请注意逗号。

对于“三到五”,您可以使用{3,5},“两个或更多”{2,},“八个或更少”{,8}

答案 2 :(得分:1)

您不需要检查两个或多个字符 - 检查两个字符就足以过滤行,因为如果有三个字符,那么仅匹配其中两个字符将与匹配两个或更多字符一样有效

这将找到具有两个或更多(连续或非连续)空格CHR(32)字符的字符串(不使用正则表达式):

SELECT *
FROM   labtec.spaces
WHERE  INSTR( spaces, ' ', 1, 2 ) > 0

这将找到两个或多个连续空格CHR(32)字符的位置:

SELECT *
FROM   labtec.spaces
WHERE  INSTR( spaces, '  ' ) > 0

如果你想要任何两个(或更多)连续的空格字符,那么你只需要检查两个匹配的字符:

SELECT *
FROM   labtec.spaces
WHERE  REGEXP_LIKE( spaces, '\s\s' ) -- Or, using POSIX syntax '[[:space:]]{2}'

更新 - 前导和尾随空格

SELECT *
FROM   labtec.spaces
WHERE  SUBSTR( spaces, 1, 2 ) = '  ' -- at least two leading spaces
OR     SUBSTR( spaces, -2 )   = '  ' -- at least two trailing spaces

或者,使用(perl-like)正则表达式:

SELECT *
FROM   labtec.spaces
WHERE  REGEXP_LIKE( spaces, '^\s\s|\s\s$' )