Cadenas

REGEXP_LIKE

Comprueba si una cadena encaja con una expresión regular.

Sintaxis

REGEXP_LIKE(<texto>, '<patrón>')
REGEXP_LIKE(<texto>, '<patrón>', '<opciones>')
<texto> ~ '<patrón>'
<texto> ~* '<patrón>'

Devuelve true o false. A diferencia de LIKE con su % y su _, el patrón es una expresión regular completa: '^[0-9]+$', solo cifras; '@', hay una arroba en algún sitio. La opción 'i' deja de distinguir mayúsculas. Los operadores ~ y ~* (sin distinguir mayúsculas) hacen lo mismo.

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Solo cifras o no
SELECT REGEXP_LIKE('12345', '^[0-9]+$') AS only_digits,
REGEXP_LIKE('12a45', '^[0-9]+$') AS with_letter;
only_digitswith_letter
truefalse
¿Es correcto el formato del teléfono?
SELECT name, phone,
REGEXP_LIKE(phone, '^\+44 [0-9]{4} [0-9]{6}$') AS valid_format
FROM employees;
namephonevalid_format
Emma+44 7700 900123true
LiamNULLNULL
Olivia+44 7700 900456true
Noah+44 7700 900789true
SophiaNULLNULL

\+ es el propio signo más; [0-9]{4}, exactamente cuatro cifras.

Lo mismo con un operador
SELECT name
FROM employees
WHERE name ~* '^[a-e]';
name
Emma

~* no distingue mayúsculas, así que la E mayúscula de Emma encaja con [a-e].

Ten en cuenta

El patrón busca una coincidencia en cualquier parte de la cadena: REGEXP_LIKE('abc123', '[0-9]') da true. Para comprobar la cadena entera, añade ^ al principio y $ al final.

El signo más, el punto y los paréntesis tienen un significado especial. Para buscar el propio carácter, ponle delante una barra invertida: '\+'.

REGEXP_LIKE solo existe desde PostgreSQL 15. En versiones anteriores, usa el operador ~.