Cadenasestándar SQL

POSITION

Encuentra en qué carácter empieza una subcadena dentro de una cadena.

Sintaxis

POSITION(<subcadena> IN <texto>)
STRPOS(<texto>, <subcadena>)

Devuelve el número del carácter donde empieza por primera vez la subcadena, contando desde 1. Si la subcadena no está, 0. Se usa a menudo junto con SUBSTRING o LEFT para recortar un trozo antes o después de cierto carácter.

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.

Dónde está la @
SELECT POSITION('@' IN 'emma@example.com') AS at_sign,
POSITION('#' IN 'emma@example.com') AS not_found;
at_signnot_found
50
El primer espacio del teléfono
SELECT name, phone,
POSITION(' ' IN phone) AS first_space
FROM employees;
namephonefirst_space
Emma+44 7700 9001234
LiamNULLNULL
Olivia+44 7700 9004564
Noah+44 7700 9007894
SophiaNULLNULL
Todo lo que hay antes de la @
SELECT LEFT('emma@example.com', POSITION('@' IN 'emma@example.com') - 1) AS login;
login
emma

La @ es el quinto carácter, así que tomamos 4 caracteres por la izquierda. Para esto también existe el más corto SPLIT_PART.

Ten en cuenta

Si no la encuentra, da 0, no NULL. Comprueba POSITION(…) > 0.

Las mayúsculas importan: POSITION('E' IN 'emma') da 0. Para no distinguirlas, lleva los dos lados al mismo formato con LOWER.

STRPOS recibe los argumentos en otro orden: primero el texto y luego lo que se busca: STRPOS('emma@example.com', '@').

Funciones relacionadas