none
buscar campos por mes sql server RRS feed

  • Pregunta

  • Tengo una tabla de empleados con los siguientes campos, necesito una consulta que me de la Num_empleado,fecha_licencia, Fecha_Salud,Fecha_conduta por el mes que yo quiera. no todas las fechas coinciden en el mes osea un empleado puede tener fechas distintas en las diferentes fechas y si esa fecha no coincide con el mes que estoy buscando pues me imagino que el campo vendra NULL. 

    Empleados_Tabla

    Num_Empleado         Fecha_Licencia     Fecha_Salud    Fecha_Conducta

        2020                    2019-10-10          2018-10-10     2017-08-09

       

        2021                    2019-12-10          2018-10-15     2017-10-09

    si quisiera buscar por ejemplo el mes de octubre la consulta me debio haber quedado de la siguiente manera, uso fecha americana osea mes-dia-ano

    Num_Empleado         Fecha_Licencia     Fecha_Salud    Fecha_Conducta

        2020                    2019-10-10          2018-10-10          null

       

        2021                    Null                     2018-10-15     2017-10-09

    Gracias

    miércoles, 28 de octubre de 2020 15:29

Respuestas

  • Hola Efrain Diaz:

    Eso es un criterio a nivel de columna y no de fila. Por tanto hay que evaluar cada columna.

    Set dateFormat ymd
    Declare @table table (Num_Empleado int, Fecha_Licencia date, Fecha_Salud date, Fecha_Conducta date)
    Insert into @table (Num_Empleado, Fecha_Licencia, Fecha_Salud, Fecha_Conducta)
    Values
    (2020,'2019-10-10','2018-10-10','2017-08-09'),
    (2021,'2019-12-10','2018-10-15','2017-10-09');
    
    
    Declare @Criterio Int = 10;
    
    Select t.num_empleado
    	 , Case
    		   When Month(t.fecha_licencia) = @Criterio Then t.fecha_licencia
    	   Else Null
    	   End As fecha_licencia
    	 , Case
    		   When Month(t.fecha_salud) = @Criterio Then t.fecha_salud
    	   Else Null
    	   End As fecha_salud
    	 , Case
    		   When Month(t.fecha_conducta) = @Criterio Then t.fecha_conducta
    	   Else Null
    	   End As fecha_conducta
    	   From @Table As t;
    

    Resultado.

    Puedes utilizar case como en el ejemplo, o IIF

    https://javifer2.wordpress.com/2019/11/17/iif-vaya-como-se-parece-al-operador-ternario/


    • Marcado como respuesta Efrain Diaz miércoles, 28 de octubre de 2020 21:23
    miércoles, 28 de octubre de 2020 16:09

Todas las respuestas

  • Algo así?

    SELECT IIF(Month(Fecha_Licencia)=10, Fecha_Licencia, null), IIF(Month(Fecha_Salud)=01, Fecha_Salud, null), IIF(Month(Fecha_Conducta)=10, Fecha_Conducta, null)
    from Empleados_Tabla

    miércoles, 28 de octubre de 2020 15:53
  • Hola Efrain Diaz:

    Eso es un criterio a nivel de columna y no de fila. Por tanto hay que evaluar cada columna.

    Set dateFormat ymd
    Declare @table table (Num_Empleado int, Fecha_Licencia date, Fecha_Salud date, Fecha_Conducta date)
    Insert into @table (Num_Empleado, Fecha_Licencia, Fecha_Salud, Fecha_Conducta)
    Values
    (2020,'2019-10-10','2018-10-10','2017-08-09'),
    (2021,'2019-12-10','2018-10-15','2017-10-09');
    
    
    Declare @Criterio Int = 10;
    
    Select t.num_empleado
    	 , Case
    		   When Month(t.fecha_licencia) = @Criterio Then t.fecha_licencia
    	   Else Null
    	   End As fecha_licencia
    	 , Case
    		   When Month(t.fecha_salud) = @Criterio Then t.fecha_salud
    	   Else Null
    	   End As fecha_salud
    	 , Case
    		   When Month(t.fecha_conducta) = @Criterio Then t.fecha_conducta
    	   Else Null
    	   End As fecha_conducta
    	   From @Table As t;
    

    Resultado.

    Puedes utilizar case como en el ejemplo, o IIF

    https://javifer2.wordpress.com/2019/11/17/iif-vaya-como-se-parece-al-operador-ternario/


    • Marcado como respuesta Efrain Diaz miércoles, 28 de octubre de 2020 21:23
    miércoles, 28 de octubre de 2020 16:09