es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

SQL Server: encontrar una subcadena utilizando la función PATINDEX

Estoy escribiendo diferentes consultas en SQL Server.

Tengo 2 tablas, Employees y Departments.
La tabla Employees está compuesta por EMPLOYEE_ID, ENAME, ID_DEP – id de departamento. La tabla Departments está compuesta por ID_DEP, DNAME.
La tarea es mostrar Employee.ENAME y su Department.DNAME donde Department.DNAME tenga la palabra Sales dentro. Debo utilizar las funciones SUBSTRING y PATINDEX.

Aquí está mi código, pero creo que se ve bastante extraño y no tiene sentido. Sin embargo, necesito usar ambas funciones en esta tarea.


SELECT e.ENAME, d.DNAME
FROM EMPLOYEE e
JOIN DEPARTMENTS d ON d.ID_DEP = e.ID_DEP
WHERE UPPER(SUBSTRING(d.DNAME, (PATINDEX(''%SALES%'', d.DNAME)), 5)) = ''SALES''

¿Alguna idea de qué debo cambiar mientras sigo usando estas dos funciones?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una mejora que podrías hacer a esta consulta es usar la función CHARINDEX en lugar de PATINDEX. CHARINDEX es más eficiente y más fácil de leer en este caso, ya que solo busca una subcadena específica en lugar de un patrón.

    Aquí tienes una versión actualizada de la consulta:

    SELECT e.ENAME, d.DNAME 
    FROM Employees e
    JOIN Departments d ON d.ID_DEP = e.ID_DEP
    WHERE CHARINDEX('Sales', d.DNAME) > 0
    

    Esta consulta devolverá los mismos resultados que la consulta original, pero es más simple y eficiente.

Comments are closed.