Foros del Web » Programando para Internet » ASP Clásico »

Trabajar con fechas en SqlServer

Estas en el tema de Trabajar con fechas en SqlServer en el foro de ASP Clásico en Foros del Web. Hola de nuevo, sigo con mis problemillas a la hora de migrar de access a SqlServer. En este caso se trata de las fechas. Tengo ...
  #1 (permalink)  
Antiguo 06/05/2005, 01:53
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Trabajar con fechas en SqlServer

Hola de nuevo, sigo con mis problemillas a la hora de migrar de access a SqlServer. En este caso se trata de las fechas. Tengo una consulta las empresas que se han dado de alta en un periodo de fechas que el usuario introduce a mano. Hasta ahora la sentencia sql era la siguiente:

Código PHP:
"SELECT *  FROM lis_empresas_altas  WHERE FALTA >= #" finicio "# AND FALTA <= #" ffin "#" 
Pero de esta maner me decia que habia un error de sintaxis en las almohadillas, asi que las he quitado dejando la sentencia asi:

Código PHP:
"SELECT *  FROM lis_empresas_altas  WHERE FALTA >= " finicio " AND FALTA <= " ffin 
Con esto ya no da error, pero tampoco me devuelve ninguna fila. He probado a usar un between dejando la sentencia de la siguiente manera:

Código PHP:
"SELECT *  FROM lis_empresas_altas  WHERE FALTA between " finicio " AND " ffin 
Pero me devuelve exactamente lo mismo, es decir, nada. Y si que debería sacar porque he comprobado que en le periodo que estaba buscando ha habido bastantes altas y la sentencia la construye correctamente. A alguien se le ocurre que puede estar pasando o que es lo que tengo que cambiar???

Gracias por adelantado, salu2,
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 06/05/2005, 02:46
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 3 meses
Puntos: 2
Prueba así:

Código PHP:
"SELECT *  FROM lis_empresas_altas WHERE FALTA >= CONVERT(smalldatetime, '" finicio "', 103) AND FALTA <= CONVERT(smalldatetime, '" ffin "', 103)" 
__________________
¿Por qué Uri Geller doblaba cucharas?
  #3 (permalink)  
Antiguo 06/05/2005, 02:56
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 19 años, 9 meses
Puntos: 18
así es, en sql server no hacen falta las #
  #4 (permalink)  
Antiguo 09/05/2005, 01:56
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Perfecto asi funciona, muchas gracias. Podrias explicarme lo que hace el 103?? Porque el resto lo entiendo, coge la cadena que llega del formulario y la convierte al formato de fecha corta, pero el 103 que pinta ahi??? Gracias de nuevo, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #5 (permalink)  
Antiguo 10/05/2005, 03:07
Avatar de txarly  
Fecha de Ingreso: marzo-2003
Ubicación: Eibar (Gipuzkoa)
Mensajes: 455
Antigüedad: 21 años, 3 meses
Puntos: 2
Te copio lo que saque sobre la ayuda del CONVERT, el 103 es el estilo del formato de fecha:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

style
Es el estilo del formato de fecha que se utiliza para convertir datos datetime o smalldatetime en datos de cadenas de caracteres (tipos de datos nchar, nvarchar, char, varchar, nchar o nvarchar), o el formato de cadena cuando se convierten datos float, real, money o smallmoney en datos de cadenas de caracteres (tipos de datos nchar, nvarchar, char, varchar, nchar o nvarchar).

En la siguiente tabla, las dos columnas de la izquierda representan los valores de style para la conversión de datetime o smalldatetime en cadenas de caracteres. Agregue 100 al valor de style para obtener el año con cuatro cifras, incluido el siglo (yyyy).


1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 Británico/Francés dd/mm/yy
4 104 Alemán dd.mm.yy
5 105 Italiano dd-mm-yy
__________________
¿Por qué Uri Geller doblaba cucharas?
  #6 (permalink)  
Antiguo 07/08/2009, 08:01
Avatar de rgbarbieri  
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Trabajar con fechas en SqlServer

podes convertirlo de la siguiente manera y vas a recibir un recordset con el formato de fecha DD/MM/YYYY

select convert(smalldatetime,convert(varchar(10),ultimafe cha,103),103) from tabla
where campodatetime between '1900-01-01' and '2079-06-06'


Es importante restringir el rango de fechas que se encuentra en el where porque, son los rangos que maneja el tipo SMALLDATETIME, por ejemplo si en la base de datos hay una fecha cargada y esta supera al 2079 y no tuvieramos aplicado el rango de fechas que especifiqué en el where, entonces no va a funcionar y arrojaría el siguiente error:

Server: Msg 296, Level 16, State 3, Line 1
The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.


Otra cosa es que en el ejemplo devuelve la fecha en formato DD/MM/YYYY porque utilicé 103, en el siguiente link se muestra la tabla completa.

msdn.microsoft.com/es-es/library/ms182418.aspx

Espero que les sirva
Ruben

Última edición por rgbarbieri; 07/08/2009 a las 08:30
  #7 (permalink)  
Antiguo 07/08/2009, 12:01
Avatar de rgbarbieri  
Fecha de Ingreso: agosto-2009
Mensajes: 13
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Trabajar con fechas en SqlServer

Anexo info para el caso que realices la migracion, respecto al insert y al update

Si la tabla de origen es de tipo DATETIME y la tabla destino es de tipo SMALLDATETIME, con el siguiente update deberias poder realizar el cambio de tipo de datos

Caso del insert:

INSERT INTO "tabla_destino" (id,fecha) SELECT id,convert(smalldatetime,convert(varchar(10),campo fecha_tablaOrigen,103),103)
FROM tabla_origen
WHERE campofecha_tablaOrigen between '1900-01-01' and '2079-06-06'


Caso del Update:

update tabla_destino
set fecha=(select convert(smalldatetime,convert(varchar(10),campofec ha_tablaOrigen,103),103) from tablaOrigen b
where tabla_destino.idusuario=b.idusuario
and campofecha_tablaOrigen between '1900-01-01' and '2079-06-06')


Espero sea de ayuda, cualquier cosa me avisan
Saludos, Ruben
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 15:29.