Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
Oracle/PLSQL: condición LIKE
Este tutorial de Oracle describe cómo usar Oracle ME GUSTA condiciones (Realizar coincidencia de patrones) sintaxis, ejemplos y ejercicios.
describir
Las condiciones LIKE de Oracle permiten caracteres comodín en la cláusula WHERE de una instrucción SELECT, INSERT, UPDATE o DELETE. Esto le permite realizar coincidencias de patrones.
sintaxis
La sintaxis de la condición LIKE en Oracle/PLSQL es:
expression LIKE pattern [ ESCAPE 'escape_character' ]
parámetro o parámetro
Expresión Una expresión de carácter, como una columna o un campo.patrón
Una expresión de caracteres que contiene una coincidencia de patrones. Los modos que puede elegir son:
comodín | explique |
---|---|
% | Le permite hacer coincidir cualquier cadena de cualquier longitud (incluida la longitud cero) |
_ | le permite hacer coincidir un solo carácter |
escape_character es opcional. Le permite probar instancias literales de caracteres comodín como % o _.
notas
- Consulte también la condición Oracle REGEXP_LIKE.
Ejemplo: uso del comodín % (comodín de porcentaje)
El primer ejemplo de Oracle LIKE que veremos implica el uso del comodín % (comodín de porcentaje).
Expliquemos cómo funciona el comodín % en las condiciones LIKE de Oracle. Queremos encontrar todos los clientes cuyo apellido comience con “Ap”.
SELECT last_name FROM customers WHERE last_name LIKE 'Ap%';
También puede usar el comodín % varias veces en la misma cadena. Por ejemplo,
SELECT last_name FROM customers WHERE last_name LIKE '%er%';
En este ejemplo de condición LIKE de Oracle, buscamos a todos los clientes cuyo apellido contenga el carácter “er”.
Ejemplo: uso de _ comodín (comodín de subrayado)
A continuación, expliquemos cómo funciona el comodín _ (comodín de subrayado) en las condiciones LIKE de Oracle. Recuerda que el comodín _ solo busca un carácter.
Por ejemplo:
SELECT supplier_name FROM suppliers WHERE supplier_name LIKE 'Sm_th';
Este ejemplo de condición LIKE de Oracle devolverá todos los proveedores cuyo nombre_proveedor tenga 5 caracteres, donde los dos primeros caracteres son ‘Sm’ y los dos últimos caracteres son ‘th’. Por ejemplo, podría devolver proveedores con nombres de proveedor “Smith”, “Smyth”, “Smath”, “Smeth”, etc.
Aquí hay otro ejemplo:
SELECT * FROM suppliers WHERE account_number LIKE '92314_';
Puede encontrar que está buscando un número de cuenta, pero solo tiene 5 de 6 dígitos. El ejemplo anterior podría recuperar 10 registros (donde el valor faltante podría ser igual a cualquier valor del 0 al 9). Por ejemplo, puede devolver números de cuenta como:
923140, 923141, 923142, 923143, 923144, 923145, 923146, 923147, 923148, 923149
Ejemplo: uso del operador NOT
A continuación, veamos cómo usar el operador Oracle NOT con comodines.
Usemos el comodín % con el operador NOT.También puede usar la condición LIKE de Oracle para encontrar nombres que son No Comience con “T”.
Por ejemplo:
SELECT supplier_name FROM suppliers WHERE supplier_name NOT LIKE 'W%';
Al colocar el operador NOT delante de la condición LIKE de Oracle, puede recuperar todos los proveedores cuyos nombres son No Comienza con “W”.
Ejemplo: uso de caracteres de escape
Es importante entender cómo “escapar de los caracteres” al hacer coincidir patrones. Estos ejemplos tratan específicamente con caracteres de escape en Oracle.
Suponga que desea buscar el carácter % o _ en una condición LIKE de Oracle. Puede usar el carácter Escape para hacer esto.
Tenga en cuenta que solo puede definir caracteres de escape como un solo carácter (longitud 1).
Por ejemplo:
SELECT * FROM suppliers WHERE supplier_name LIKE 'Water!%' ESCAPE '!';
Este ejemplo de condición LIKE de Oracle identifica el carácter ! como un carácter de escape. Esta declaración devolverá todos los proveedores denominados Water%.
Aquí hay otro ejemplo más complejo del uso de caracteres de escape en condiciones LIKE de Oracle.
SELECT * FROM suppliers WHERE supplier_name LIKE 'H%!%' ESCAPE '!';
Este ejemplo de condición LIKE de Oracle devuelve todos los proveedores cuyos nombres comienzan con H y terminan con %. Por ejemplo, devolverá un valor como “Hola%”.
También puede utilizar caracteres de escape con el carácter _ en condiciones LIKE de Oracle.
Por ejemplo:
SELECT * FROM suppliers WHERE supplier_name LIKE 'H%!_' ESCAPE '!';
Este ejemplo de condición LIKE de Oracle devuelve todos los proveedores cuyos nombres comienzan con H y terminan con _. Por ejemplo, devolverá un valor como “Hola_”.
Preguntas frecuentes
Pregunta: ¿Cómo combino la función UPPER de Oracle con la condición LIKE de Oracle? Estoy tratando de consultar un campo de texto libre para todos los registros que contienen la palabra “prueba”. El problema es que se puede ingresar por: TEST, Test o prueba.
R: Para responder a esta pregunta, veamos un ejemplo.
Supongamos que tenemos una tabla de proveedores con un campo llamado nombre_proveedor que contiene los valores PRUEBA, Prueba o prueba.
Si quisiéramos encontrar todos los registros que contienen la palabra “prueba”, ya sea que esté almacenada como PRUEBA, Prueba o prueba, podríamos ejecutar cualquiera de las siguientes declaraciones SELECT:
SELECT * FROM suppliers WHERE UPPER(supplier_name) LIKE ('TEST%');
o
SELECT * FROM suppliers WHERE UPPER(supplier_name) LIKE UPPER('test%')
Estas declaraciones SELECT usan una combinación de la función UPPER de Oracle y una condición LIKE para devolver todos los registros donde el campo nombre_proveedor contiene la palabra “prueba”, ya sea que esté almacenado como PRUEBA, Prueba o prueba.
Ejercicio 1:
Encuentre todos los registros cuyo nombre_empleado termine con la letra “h” en la tabla de empleados con los siguientes datos.
CREATE TABLE employees ( employee_number number(10) not null, employee_name varchar2(50) not null, salary number(6), CONSTRAINT employees_pk PRIMARY KEY (employee_number) ); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1001, 'John Smith', 62000); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1002, 'Jane Anderson', 57500); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1003, 'Brad Everest', 71000); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1004, 'Jack Horvath', 42000);
Solución al Ejercicio #1:
La siguiente declaración SELECT usa la condición LIKE de Oracle para devolver registros cuyo nombre_empleado termina con la letra “h”.
SELECT * FROM employees WHERE employee_name LIKE '%h';
Devolverá el siguiente conjunto de resultados:
ID de empleado | nombre del empleado | salario |
---|---|---|
1001 | John Smith | 62000 |
1004 | Jack Horvath | 42000 |
Ejercicio de práctica #2:
Encuentre todos los registros cuyo nombre_empleado contenga la letra “s” de la tabla de empleados con los siguientes datos.
CREATE TABLE employees ( employee_number number(10) not null, employee_name varchar2(50) not null, salary number(6), CONSTRAINT employees_pk PRIMARY KEY (employee_number) ); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1001, 'John Smith', 62000); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1002, 'Jane Anderson', 57500); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1003, 'Brad Everest', 71000); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1004, 'Jack Horvath', 42000);
Solución al ejercicio #2:
La siguiente sentencia SELECT de Oracle utilizará la condición LIKE de Oracle para devolver registros cuyo nombre_empleado contenga la letra “s”.
SELECT * FROM employees WHERE employee_name LIKE '%s%';
Devolverá el siguiente conjunto de resultados:
ID de empleado | nombre del empleado | salario |
---|---|---|
1002 | jane anderson | 57500 |
1003 | brad everest | 71000 |
Ejercicio de práctica #3:
De acuerdo con la tabla de proveedores con los siguientes datos, busque todos los registros con ID de proveedor de 4 dígitos y que comiencen con “500”.
CREATE TABLE suppliers ( supplier_id varchar2(10) not null, supplier_name varchar2(50) not null, city varchar2(50), CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id) ); INSERT INTO suppliers(supplier_id, supplier_name, city) VALUES ('5008', 'Microsoft', 'New York'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES ('5009', 'IBM', 'Chicago'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES ('5010', 'Red Hat', 'Detroit'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES ('5011', 'NVIDIA', 'New York');
Solución al Ejercicio #3:
La siguiente instrucción SELECT de Oracle utilizará la condición LIKE de Oracle para devolver registros con un ID de proveedor de 4 dígitos que comience con “500”.
SELECT * FROM suppliers WHERE supplier_id LIKE '500_';
Devolverá el siguiente conjunto de resultados:
Identificación del proveedor | Nombre del proveedor | Ciudad |
---|---|---|
5008 | microsoft | Nueva York |
5009 | IBM | chicago |