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

Fechas en sql server

Estas en el tema de Fechas en sql server en el foro de SQL Server en Foros del Web. Hola Recien estoy comenzando en Sql server. Mi pregunta es la siguiente: ¿ Que tipo de dato correcto debo usar para el campo fecha en ...
  #1 (permalink)  
Antiguo 09/01/2017, 12:59
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 423
Antigüedad: 8 años, 10 meses
Puntos: 0
Fechas en sql server

Hola

Recien estoy comenzando en Sql server. Mi pregunta es la siguiente: ¿ Que tipo de dato correcto debo usar para el campo fecha en sql server?

Tengo que realizar un consulta usando sql server y el lenguaje visual basic. El usuario ingresa en una caja de texto la fecha de incio y en otra caja de texto la fecha final. Los datos que va arrojar la consulta van a estar entre esas dos fechas incluyendo las mismas.

Esta pregunta hago porque las consulta no me salió definiendo las fechas como date o varchar.

Gracias.
  #2 (permalink)  
Antiguo 09/01/2017, 13:04
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.447
Antigüedad: 9 años, 6 meses
Puntos: 178
Respuesta: Fechas en sql server

¿Y que version de SQL Server manejas?

Queda claro que un VARCHAR, nunca se utilizaria para guardar datos de tipo FECHA.

Tipos de datos y funciones de fecha y hora:

https://msdn.microsoft.com/es-es/library/ms186724.aspx
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 09/01/2017, 15:24
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 423
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Fechas en sql server

¿Y que version de SQL Server manejas?
SQL Server 2016.

Estas son las consultas


Cita:
Select sum(ingmon)as toting from ingresos where ingfec >= CAST('fechad' AS date) and ingfec <= CAST('fechah' AS date)"

Select sum(ingmon)as toting from ingresos where ingfec >= CONVERT(date,'fechad') and ingfec <= CONVERT(date, 'fechah')"
Aclaraciòn

Las fechas: fechad y fechah son string y las ingresos desde dos masktext(cajas de texto con mascaras).

El uso de CAST Y CONVERT no estoy seguro que esten bien. En cuanto a definir la fecha como date es porque necesito solo la fecha y no la hora ni los minutos.

Gracias
  #4 (permalink)  
Antiguo 09/01/2017, 18:43
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 6.764
Antigüedad: 10 años, 5 meses
Puntos: 672
Respuesta: Fechas en sql server

para eso hay un tipo DATE ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 10/01/2017, 12:05
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.447
Antigüedad: 9 años, 6 meses
Puntos: 178
Respuesta: Fechas en sql server

Es un grave error almacenar FECHAS en campos de tipo STRING, no puedes aplicar las funciones de fecha, a menos claro, que hagas un CAST o CONVERT, pero al hacer esto, la base deja de utilizar los INDICES declarados en estos campos.

Como bien dice Libras, existe un tipo de dato DATE que te permite almacenar solamente la FECHA sin las horas.
__________________
MCTS Isaias Islas
  #6 (permalink)  
Antiguo 11/01/2017, 06:44
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 423
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Fechas en sql server

Hola

Las fechas las he definido en la base de datos primero con date y luego con date time(porque no me salia con date) pero com ambos tipos la consulta no me arroja registros.
Las he convertido a un formato yyyymmdd porque es un estandar y he visto por internet que es mas seguro por el tema del formato de las fechas en varios paises que suele dar problema.

Esta es la consulta:

Cita:
Select sum(ingmon)as toting from ingresos where convert(nvarchar, ingfec, 112) >= 'fechad' and convert(nvarchar, ingfec, 112) <= 'fechah'"
Aclaraciòn:

Las fechas: fechad y fechah son variables que contienen la fecha de inicio y final que el usuaio ingresa a traves de dos masktext(cajas de texto con mascaras). Usando estas variables no me arroja resultados la consulta. Ahora si yo reemplazo estas varialbes por constantes, asi no hay problema me arroja los registros tranquilamente y todo esta bien. El problema es con las varialbes fechad y fechah.

El campo ingfec primero la declare como date pero como no arrojaba resultados, la declare luego con datetime y tampoco me arrojo resultados. Vuelvo a repetir mi problemas son con las variables fechah y fechad que estan definidos en visual basic como string(variables de cadena).

Gracias.
  #7 (permalink)  
Antiguo 11/01/2017, 08:17
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 6.764
Antigüedad: 10 años, 5 meses
Puntos: 672
Respuesta: Fechas en sql server

El problema es que deberias de hacer el cast en tu variable no en el campo fecha, la aplicacion debe de adecuarse a la base de datos no al contrario
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 11/01/2017, 09:02
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 423
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Fechas en sql server

Cita:
El problema es que deberias de hacer el cast en tu variable no en el campo fecha, la aplicacion debe de adecuarse a la base de datos no al contrario
Ya habia hecho anteriormente esto y tampoco me dio resultados, no me funcionó. La consulta está en la primera respuesta a iislas. Escribo de vuelta la consulta:

Cita:
Select sum(ingmon)as toting from ingresos where ingfec >= CAST('fechad' AS date) and ingfec <= CAST('fechah' AS date)"
.

Y paso lo mismo no me funciona con las fechad y fechah. Si coloco en vez de las variables fechad y fecha h , fechas constantes entre comillas simples por ejemplo '2016-01-01' y '2018-12-31' o con el otro formato '20160101' y '20181231' entonces si me funciona y todo anda bien.

No sé cual es el problema. Gracias.
  #9 (permalink)  
Antiguo 11/01/2017, 09:31
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 6.764
Antigüedad: 10 años, 5 meses
Puntos: 672
Respuesta: Fechas en sql server

Ahora como llegan esas fechas a la base de datos? cual es el formato de fecha que tienes en tu base?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 11/01/2017, 16:05
 
Fecha de Ingreso: marzo-2008
Ubicación: Posadas Misiones Argentina
Mensajes: 423
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Fechas en sql server

Cita:
cual es el formato de fecha que tienes en tu base?
El formato de fecha que tengo en mi base de datos es: yyyy-mm-dd. El dato lo tengo definido como date.
  #11 (permalink)  
Antiguo 12/01/2017, 15:09
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.447
Antigüedad: 9 años, 6 meses
Puntos: 178
Respuesta: Fechas en sql server

Conclusion: TUS VARIABLES no tienen lo que tu "crees" que tienen
__________________
MCTS Isaias Islas



La zona horaria es GMT -6. Ahora son las 14:54.