Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Comparar Fechas SQL Server 2005

Estas en el tema de Comparar Fechas SQL Server 2005 en el foro de SQL Server en Foros del Web. Hola a todos, Tengo un problema con la comparación de fechas, estoy trabajando con VB.Net y SQL Server 2005. Mi campo en la base de ...
  #1 (permalink)  
Antiguo 04/02/2010, 11:57
 
Fecha de Ingreso: mayo-2004
Ubicación: Lima-Peru
Mensajes: 72
Antigüedad: 20 años, 6 meses
Puntos: 0
Comparar Fechas SQL Server 2005

Hola a todos,

Tengo un problema con la comparación de fechas, estoy trabajando con VB.Net y SQL Server 2005.

Mi campo en la base de datos es del tipo DATETIME y mis atributos del VB.Net es String en el formato "dd/mm/yyyy hh:mm:ss a.m./p.m." por ejemplo -> "04/02/2010 12:51:30 p.m."

He intentado con:

1)
.....and DATEDIFF(day, " & filtro.FechaInicial & ",Fecha)>0 ")
and DATEDIFF(day, Fecha, " & filtro.FechaFinal & ")>0 ").......
2)
.....and CONVERT (VARCHAR, Fecha, 112) >= " & filtro.FechaInicial & "")
and CONVERT (VARCHAR, Fecha, 112) <= " & filtro.FechaFinal & "")......
3)
.....and Fecha >= " & CType(filtro.FechaInicial, DateTime) & "")
and Fecha <= " & CType(filtro.FechaFinal, DateTime) & "")......
4)
.....and CONVERT (DATETIME, Fecha, 112) BETWEEN CONVERT (DATETIME, " & filtro.FechaInicial & ",112 AND CONVERT (DATETIME, " & filtro.FechaFinal & ",112")

Pero NADA me genera error

Si alguien podria ayudarme sobre como realizar correctamente la comparación se lo agradecería bastante, de antemano gracias por su ayuda.
  #2 (permalink)  
Antiguo 04/02/2010, 12:11
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 18 años
Puntos: 8
Respuesta: Comparar Fechas SQL Server 2005

Procura manejar los formatos de la siguiente manera YYYYMMDD HH:MM y no habrá problemas, lo anterior al hacer consultas a SQL Server.
  #3 (permalink)  
Antiguo 04/02/2010, 15:45
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Comparar Fechas SQL Server 2005

Ademas de asegurarte de NO enviar desde tu cliente, instrucciones T-SQL y hacerlo todo mediante procedimientos almacenados
  #4 (permalink)  
Antiguo 05/02/2010, 11:56
 
Fecha de Ingreso: mayo-2004
Ubicación: Lima-Peru
Mensajes: 72
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

daniel00,
Como podría manejarlos en ese formato?. Actualmente, en mi programación tengo mi variable fecha del tipo String que se llena desde un DataTimePicker (fecha = dtp.Value.ToString) y se llena mi variable fecha como xej. "05/02/2010 12:51:30 p.m."

iislas,
En realidad las sentencias lo he realizado desde mi aplicacion, no como procedimientos almacenados, se que es un problema de mantenimiento al momento que exista alguna actualización en el query, tendría que actualizarlo en cada cliente. Pero fuera de esto, que inconveniente tendría haberlo implementado de esta manera?
  #5 (permalink)  
Antiguo 05/02/2010, 12:41
 
Fecha de Ingreso: febrero-2007
Mensajes: 46
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Comparar Fechas SQL Server 2005

no es por el formato de fecha que le estas indicando a tu consulta?? tu tienes 112 y segun los libros en linea de sql server ese valor es para un formato aammdd y tu formato es dd/mm/yyyy hh:mm:ss, has intentado usando 103 en vez de 112?

saludos.
  #6 (permalink)  
Antiguo 05/02/2010, 14:19
 
Fecha de Ingreso: mayo-2004
Ubicación: Lima-Peru
Mensajes: 72
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

Itzcoatl,
Probé con 103 pero igual me genera problemas. El error exacto que me bota es:
Incorrect syntax near '03'
  #7 (permalink)  
Antiguo 05/02/2010, 16:06
 
Fecha de Ingreso: marzo-2004
Mensajes: 70
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

Supongamos que esta sea tu consulta en base de datos mssql con formato de fecha ISO

SELECT * FROM TABLA
WHERE CONVERT(varchar,fecha,112)>=@fechaInicio AND CONVERT(varchar,fecha,112)<=@fechaFin

si utilizas el formato 112, q es YYYYmmdd hh:mm:ss en tu sentencia SQL,
debes enviar desde tu aplicacion la misma forma:

//Supongamos que estos sean los valores de las fechas
// fechaInicio serie YYYYmmdd 0:0:0 y fechaFin YYYYmmdd 23:59:59
String fechaInicio=fechaToISOformat(dtpInicio.Value.ToSho rtDateString());
String fechaFin=fechaToISOformat(dtpFin.Value.ToShortDate String())+" 23:59:59";

public static string fechaToISOformat(DateTime x)
{
String y = x.Year.ToString() +
clsUtilitario.Right("0" + x.Month.ToString(), 2) +
clsUtilitario.Right("0" + x.Day.ToString(), 2);
return y;
}
public static string fechaToISOformat(String x)
{
return clsUtilitario.fechaToISOformat(DateTime.Parse(x));
}
el ejemplito aqui arriba convierte tu fecha del DateTimePicker a formato ISO
YYYYmmdd

ahora ya tienes fechaIni y fechaFin como de la forma YYYYmmdd hh:mm:ss y lo puedes enviar a tu consulta o procedimiento almacenado

espero q te sirva
__________________
GuzZpaWn
  #8 (permalink)  
Antiguo 08/02/2010, 09:36
 
Fecha de Ingreso: mayo-2004
Ubicación: Lima-Peru
Mensajes: 72
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

devilguzz,
Convertí el codigo C# que me indicas por codigo VB, pero no encuentro la clase utilitario clsUtilitario, es una clase que has creado? o es propia del C#?, o proviene de alguna librería que me tengo que descargar?. Como puedo proceder para poder utilizar dicha clase y poder probar el código.

Espero sugerencias también de alguién que se haya topado con algo similar. Saludos.
  #9 (permalink)  
Antiguo 08/02/2010, 11:00
 
Fecha de Ingreso: marzo-2004
Mensajes: 70
Antigüedad: 20 años, 7 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

es una clase que he creado...donde pongo todo tipo de pekeñas utilidades puedes crear una con el mismo nombre no hay problema...o implementar simplemente el metodo para que no tengas q llamar desde la clase...
__________________
GuzZpaWn
  #10 (permalink)  
Antiguo 08/02/2010, 11:56
 
Fecha de Ingreso: mayo-2004
Ubicación: Lima-Peru
Mensajes: 72
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

SOLUCIONADO

Gracias devilguzz hice el cambio en el código y funcionó la comparacion de fechas. Dejaré a continuacion el codigo en VB.Net:

CódigoSQL
SELECT * FROM TABLA
WHERE CONVERT(varchar,fecha,112)>=@fechaInicio AND CONVERT(varchar,fecha,112)<=@fechaFin

CódigoVBNet

String fechaInicio=fechaToISOformat(dtpInicio.Value.ToSho rtDateString())
String fechaFin=fechaToISOformat(dtpFin.Value.ToShortDate String()) + " 23:59:59"

Public Function fechaToISOformat(ByVal x As DateTime) As String
Dim y As String = x.Year.ToString()
If x.Month.ToString.Length < 2 Then
y = y + "0" + x.Month.ToString
End If
If x.Day.ToString.Length < 2 Then
y = y + "0" + x.Day.ToString
End If
Return y
End Function

Public Function fechaToISOformat(ByVal x As String) As String
Return fechaToISOformat(DateTime.Parse(x))
End Function

'Gracias!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  #11 (permalink)  
Antiguo 08/02/2010, 12:19
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Comparar Fechas SQL Server 2005

iislas,
En realidad las sentencias lo he realizado desde mi aplicacion, no como procedimientos almacenados, se que es un problema de mantenimiento al momento que exista alguna actualización en el query, tendría que actualizarlo en cada cliente. Pero fuera de esto, que inconveniente tendría haberlo implementado de esta manera?

1.- Que es una regla de programacion o desarrollo de 3 capas
2.- Que el plan de ejecucion es diferente, para cuando existe un STORE PROCEDURE.
  #12 (permalink)  
Antiguo 09/02/2010, 11:47
 
Fecha de Ingreso: mayo-2004
Ubicación: Lima-Peru
Mensajes: 72
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

Cita:
Iniciado por iislas Ver Mensaje
iislas,
En realidad las sentencias lo he realizado desde mi aplicacion, no como procedimientos almacenados, se que es un problema de mantenimiento al momento que exista alguna actualización en el query, tendría que actualizarlo en cada cliente. Pero fuera de esto, que inconveniente tendría haberlo implementado de esta manera?

1.- Que es una regla de programacion o desarrollo de 3 capas
2.- Que el plan de ejecucion es diferente, para cuando existe un STORE PROCEDURE.
Cita:
1.- Que es una regla de programacion o desarrollo de 3 capas
Segun lo que sé, la regla de programacion permite trabajar en la capa de datos con llamados a Store Procedures o directamente con codigo SQL embebido, siempre y cuando se respete la relación de la capa de presentacion con la capa negocio y lógica y esta con la capa de datos, para poder ser considerado programacion en 3 capas.

Cita:
2.- Que el plan de ejecucion es diferente, para cuando existe un STORE PROCEDURE.
A que te refieres exactamente con que el plan de Ejecucion es diferente? si es por el tema de la programación obviamente que si, dado se desarrolla programacion PL-SQL. Ahora si es por el tema de eficiencia-rapidez no sabría responderte si es más eficiente el manejo con store procedures q con codigo sql en la aplicación.


Saludos
  #13 (permalink)  
Antiguo 09/02/2010, 12:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Comparar Fechas SQL Server 2005

Bueno, los procedimientos te van generando un cache, al ser OBJETOS de la base de datos, cosa que no sucede con condigo T-SQL, ademas de que el motor al recibir directamente codigo T-SQL, debera siempre VALIDAR dicho codigo recibido.
  #14 (permalink)  
Antiguo 10/02/2010, 13:32
 
Fecha de Ingreso: mayo-2004
Ubicación: Lima-Peru
Mensajes: 72
Antigüedad: 20 años, 6 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

Cita:
Iniciado por iislas Ver Mensaje
Bueno, los procedimientos te van generando un cache, al ser OBJETOS de la base de datos, cosa que no sucede con condigo T-SQL, ademas de que el motor al recibir directamente codigo T-SQL, debera siempre VALIDAR dicho codigo recibido.
Entonces se podría afirmar que trabajar con Store Procedure es mas rapido que T-SQL debido q el primero no realiza validaciones?
  #15 (permalink)  
Antiguo 10/02/2010, 14:03
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Comparar Fechas SQL Server 2005

Si, los procedimientos al ser un OBJETO de la base, ya fueron pre-validados en su estructura, mientras que el T-SQL, se validara siempre cada verbo enviado
  #16 (permalink)  
Antiguo 30/06/2010, 17:05
 
Fecha de Ingreso: junio-2010
Mensajes: 23
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Comparar Fechas SQL Server 2005

oiee enseñame tu codigo completo.

o enviame tu programa por favor.


[email protected]

Etiquetas: comparar, fechas, server, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:38.