none
Registros que hayan superado las 48horas , comparando dos fechas RRS feed

  • Pregunta

  • La idea es seleccionar los registros cuya fecha de franqueo haya superado las 48 horas respecto a una fecha que se pasa como parámetro.

    Por ejemplo. Si la fecha de entrada es 25/11/2020 17:00, habría que seleccionar los que tienen fecha franqueo menor o igual al 23/11 a las 17:00
    El campo fecha franqueo  es de tipo Datetime, no Datetime2.

    Si se comparase con la fecha actual sería así:
    WHERE FechaFranqueo >= DATEADD(HOUR, -48, GETDATE())

    Hay que comparar con una fecha de entrada, como parámetro.

    Cómo podría hacerse? Sería SARGable ?

    miércoles, 25 de noviembre de 2020 20:39

Respuestas

  • Nunca he trabajado con Dapper. Si estuvieses usando Entity Framework, simplemente añadirías la fecha en la consulta LINQ y el sistema automáticamente lo convertiría en el parámetro de tipo DateTime, suponiendo que la variable en lado cliente sea también de tipo DateTime:

    DateTime laFecha = ...
    
    var resultado = from x in db.LaTabla where x.FechaFranqueo >= laFecha.AddHours(-48) select new { listaDeColumnas };

    • Marcado como respuesta Miriam Pasion lunes, 30 de noviembre de 2020 22:22
    jueves, 26 de noviembre de 2020 8:40

Todas las respuestas

  • Sería prácticamente idéntico a lo que tienes, solo que donde pone GETDATE() lo cambias por el nombre del parámetro.

    DECLARE #LaFecha DATETIME
    ....
    
    ...WHERE FechaFranqueo >= DATEADD(HOUR, -48, @LaFecha)

    Por supuesto, la forma de declarar el parámetro depende de cómo lo vayas a pasar. Si la sentencia está dentro de un procedimiento almacenado, el parámetro iría dentro de la lista entre paréntesis sin la palabra DECLARE. Si lo pasas directamente a una sentencia desde código cliente, entonces lo añades directamente sobre la colección de parámetros del comando llamante.

    Lo que comentas del DATETIME2 es completamente irrelevante. Solo sería importante si tuvieses que contar las millonésimas de segundo, ya que el DATETIME únicamente llega a los milisegundos. Pero si solo vas a meter hora y minutos, te da exactamente igual. Incluso te funcionaría con un SMALLDATETIME.

    miércoles, 25 de noviembre de 2020 21:12
  • Lo utilizaría con .NET y Dapper, con un parámetro en tipo anónimo:

    new { LaFecha = variableDateTime }



    Y la consulta parametrizada

    ...WHERE FechaFranqueo >= DATEADD(HOUR, -48, @LaFecha)
    jueves, 26 de noviembre de 2020 6:27
  • Nunca he trabajado con Dapper. Si estuvieses usando Entity Framework, simplemente añadirías la fecha en la consulta LINQ y el sistema automáticamente lo convertiría en el parámetro de tipo DateTime, suponiendo que la variable en lado cliente sea también de tipo DateTime:

    DateTime laFecha = ...
    
    var resultado = from x in db.LaTabla where x.FechaFranqueo >= laFecha.AddHours(-48) select new { listaDeColumnas };

    • Marcado como respuesta Miriam Pasion lunes, 30 de noviembre de 2020 22:22
    jueves, 26 de noviembre de 2020 8:40