Operadores POSIX - Amazon Redshift

Operadores POSIX

Una expresión regular POSIX es una secuencia de caracteres que especifica un patrón de coincidencia. Una cadena coincide con una expresión regular si es miembro del conjunto regular descrito por la expresión regular.

Las expresiones regulares POSIX proporcionan un medio más potente para la coincidencia de patrones que los operadores LIKE y SIMILAR TO. Los patrones de expresión regular POSIX pueden coincidir con cualquier parte de una cadena, a diferencia del operador SIMILAR TO, que devuelve true solo si su patrón coincide con la cadena completa.

nota

La coincidencia de expresiones regulares a través de los operadores POSIX es costosa informáticamente. Recomendamos utilizar LIKE cuando sea posible, especialmente cuando procesa una gran cantidad de filas. Por ejemplo, las siguientes consultas son idénticas desde el punto de vista funcional, pero la consulta que utiliza LIKE se ejecuta varias veces más rápido que la consulta que utiliza una expresión regular:

select count(*) from event where eventname ~ '.*(Ring|Die).*'; select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';

Sintaxis

expression [ ! ] ~ pattern

Argumentos

expresión

Una expresión de carácter UTF-8 válido, como un nombre de columna.

!

Operador de negación. No coincide con la expresión regular.

~

Realiza una coincidencia que distingue entre mayúsculas y minúsculas para cualquier subcadena de expresión.

nota

Un ~~ es sinónimo de LIKE.

pattern

Un literal de cadena que representa un patrón de expresión regular.

Si el patrón no contiene caracteres comodín, el patrón solamente representa la propia cadena.

Para buscar cadenas que incluyan metacaracteres, como ". * | ? ", etc., aplique escape al carácter con dos barras diagonales invertidas (" \\"). A diferencia de SIMILAR TO y LIKE, la sintaxis de expresión regular POSIX no admite un carácter de escape definido por el usuario.

Cualquiera de las expresiones de carácter pueden ser tipos de datos CHAR o VARCHAR. Si son diferentes, Amazon Redshift convierte el patrón al tipo de datos de la expresión.

Todas las expresiones de carácter pueden ser tipos de datos CHAR o VARCHAR. Si las expresiones tienen diferentes tipos de datos, Amazon Redshift los convierte al tipo de datos de la expresión.

La coincidencia de patrones POSIX admite los siguientes metacaracteres:

POSIX Descripción
. Coincide con cualquier carácter.
* Coincide con cero o más ocurrencias.
+ Coincide con una o más ocurrencias.
? Coincide con cero o una ocurrencia.
| Especifica coincidencias alternativas; por ejemplo, E | H significa E o H.
^ Coincide con el carácter de comienzo de línea.
$ Coincide con el carácter de final de línea.
$ Coincide con el final de la cadena.
[ ] Los corchetes especifican una lista de coincidencias, que debe coincidir con una expresión en la lista. Un signo de intercalación (^) precede una lista no coincidente, que relaciona cualquier carácter excepto las expresiones representadas en la lista.
( ) Los paréntesis agrupan elementos en un único elemento lógico.
{m} Repite el elemento anterior exactamente m veces.
{m,} Repite el elemento anterior m o más veces.
{m,n} Repite el elemento anterior al menos m y no más de n veces.
[: :] Relacione cualquier carácter dentro de una clase de caracteres POSIX. En las siguientes clases de caracteres, Amazon Redshift solo admite caracteres ASCII: [:alnum:], [:alpha:], [:lower:] y [:upper:].

Amazon Redshift admite las siguientes clases de caracteres POSIX.

Clase de caracteres Descripción
[[:alnum:]] Todos los caracteres alfanuméricos ASCII
[[:alpha:]] Todos los caracteres alfabéticos ASCII
[[:blank:]] Todos los caracteres de espacio en blanco
[[:cntrl:]] Todos los caracteres de control (no imprimibles)
[[:digit:]] Todos los dígitos numéricos
[[:lower:]] Todos los caracteres alfabéticos ASCII en minúsculas
[[:punct:]] Todos los caracteres de puntuación
[[:space:]] Todos los caracteres de espacio (no imprimibles)
[[:upper:]] Todos los caracteres alfabéticos ASCII en mayúsculas
[[:xdigit:]] Todos los caracteres hexadecimales válidos

Amazon Redshift admite los siguientes operadores influenciados por Perl en expresiones regulares. Aplique escape al operador utilizando dos barras diagonales invertidas ("\\’).  

Operador Descripción Expresión de clase de carácter equivalente
\\d Un carácter que contiene un dígito [[:digit:]]
\\D Un carácter que no contiene dígitos [^[:digit:]]
\\w Un carácter que contiene una palabra [[:word:]]
\\W Un carácter que no contiene palabras [^[:word:]]
\\s Un carácter de espacio en blanco [[:space:]]
\\S Un carácter que contiene un espacio en blanco [^[:space:]]
\\b Una palabra límite

Ejemplos

En la tabla siguiente se muestran ejemplos de coincidencia de patrones a través de operadores POSIX:

Expression Devuelve
'abc' ~ 'abc' True
'abc' ~ 'a' True
'abc' ~ 'A' False
'abc' ~ '.*(b|d).*' True
'abc' ~ '(b|c).*' True
'AbcAbcdefgefg12efgefg12' ~ '((Ab)?c)+d((efg)+(12))+' True
'aaaaaab11111xy' ~ 'a{6}.[1]{5}(x|y){2}' True
'$0.87' ~ '\\$[0-9]+(\\.[0-9][0-9])?' True
'ab c' ~ '[[:space:]]' True
'ab c' ~ '\\s' True
' ' ~ '\\S' False

En el siguiente ejemplo, se encuentran las ciudades cuyos nombres contienen E o H:

SELECT DISTINCT city FROM users WHERE city ~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Agoura Hills Auburn Hills Benton Harbor Beverly Hills Chicago Heights

En el siguiente ejemplo, se encuentran las ciudades cuyos nombres no contienen E ni H:

SELECT DISTINCT city FROM users WHERE city !~ '.*E.*|.*H.*' ORDER BY city LIMIT 5; city ----------------- Aberdeen Abilene Ada Agat Agawam

En el siguiente ejemplo se usa la cadena de escape predeterminada ("\\") para buscar cadenas que incluyan un punto.

SELECT venuename FROM venue WHERE venuename ~ '.*\\..*' ORDER BY venueid; venuename ------------------------------ St. Pete Times Forum Jobing.com Arena Hubert H. Humphrey Metrodome U.S. Cellular Field Superpages.com Center E.J. Nutter Center Bernard B. Jacobs Theatre St. James Theatre