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

SELECCIONAR registros por fecha - MES (MONTH)

Estas en el tema de SELECCIONAR registros por fecha - MES (MONTH) en el foro de SQL Server en Foros del Web. hola, tengo una tabla que se llama ventas, lo que intento hacer es seleccionar todas las venta de un detrminado mes, pero tambien quiero especificar ...
  #1 (permalink)  
Antiguo 29/11/2008, 12:27
Avatar de robertgustavo  
Fecha de Ingreso: marzo-2008
Ubicación: Camaná - Arequipa
Mensajes: 213
Antigüedad: 16 años, 1 mes
Puntos: 4
SELECCIONAR registros por fecha - MES (MONTH)

hola, tengo una tabla que se llama ventas, lo que intento hacer es seleccionar todas las venta de un detrminado mes, pero tambien quiero especificar de que año.

Código:
Dim Adaptador As New SqlDataAdapter("Select * from ventas where MONTH(Fecha)=10",ConexionFNow)
como lo anidaria para especificar el año tambien, por que ese codigo, selecciona las ventas del mes de octubre de todos los años .

seria algo como esto? >>>>

Dim Adaptador As New SqlDataAdapter("Select * from ventas where MONTH(Fecha)=10 AND YEAR(NOW())",ConexionFNow)
__________________
Soluciones basadas en .NET Framework y SQL Server
  #2 (permalink)  
Antiguo 29/11/2008, 12:32
Avatar de robertgustavo  
Fecha de Ingreso: marzo-2008
Ubicación: Camaná - Arequipa
Mensajes: 213
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

Disculpen, ya lo logre era asi:

"
Cita:
Select * from ventas where MONTH(Fecha)=10 and YEAR(Fecha)=2008"
__________________
Soluciones basadas en .NET Framework y SQL Server
  #3 (permalink)  
Antiguo 29/11/2008, 21:37
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

Por regla general, hay que evitar aplicar funciones a los campos en el where, ya que esto decrementa el redimiento, ya que puede que no se utilicen los indices adecuados y el tiempo que supone el convertir cada unos de los registros en la tabla...

una mejor sentencia seria...

Código sql:
Ver original
  1. SELECT *
  2. FROM ventas
  3. WHERE Fecha>= CONVERT(datetime, '20081001') AND
  4.       Fecha<  CONVERT(datetime, '20081101')

No te sera dificil calcular los datos del filtro desde el front..

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 03/12/2008 a las 10:21
  #4 (permalink)  
Antiguo 01/12/2008, 22:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

Tambien seria conveniente que no colocaras codigo T-SQL en tu capa front, solo se ejecutaran Store Procedure.
  #5 (permalink)  
Antiguo 02/12/2008, 08:11
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Exclamación Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

Cita:
Iniciado por Andres95 Ver Mensaje
Por regla general, hay que evitar aplicar funciones a los campos en el where, ya que esto decrementa el redimiento, ya que puede que no se utilicen los indices adecuados y el tiempo que supone el convertir cada unos de los registros en la tabla...

una mejor sentencia seria...

Código:
Select * 
from ventas 
where Fecha>= convert(datetime, '20081001') and 
      Fecha<  convert(datetime, '20081101')
No te sera dificil calcular los datos del filtro desde el front..

Saludos!
Andres, tu mismo te contradices. Convert no es una funcion?
Muestrame donde has leido esa "regla general" por favor.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #6 (permalink)  
Antiguo 02/12/2008, 08:57
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

Si bien es cierto que hay una pequeña contradicción, no deja de ser abolutamente cierto. Antes que aplicar una función a un campo dentro de un where es preferible aplicar la función inversa al valor

Lee como funciona el optimizador en la msdn, y además realiza un pequeño ejemplo para sacar tus propias conclusiones.

Código:
create table t1 (id numeric(8), data varchar(30))
Go
create unique index ind_t1_id on t1(id)
Go
insert into t1 values (1,'data 1')
insert into t1 values (2,'data 2')
insert into t1 values (3,'data 3')
insert into t1 values (4,'data 4')
insert into t1 values (5,'data 5')
insert into t1 values (6,'data 6')
Go
select * from t1 where id = 5
Go
select * from t1 where (id+3) = 5 --funcion aplicada a un campo
Go
select * from t1 where id = 5 - 3 --funcion inversa aplicada al valor
Go
En los últimos 3 select activa el plan de ejecución real y mira las diferencias.

Saludos
  #7 (permalink)  
Antiguo 02/12/2008, 10:22
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

A lo que yo iba, era, como puedo seleccionar un conjunto de registros si no deberia funciones en el where? como seria en ejemplo de arriba?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 02/12/2008, 10:28
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

que tal Flaviovich...

Ya no recuerdo en donde (hace mucho tiempo) lei ese comentario, pero te puedo decir que por experiencia lo he comprobado, jejeje.

Y no es contradictoria, porque la funcion no la aplico al campo sino a una constante (o variable). Es lo mismo que comenta matanga.

Asi la funcion se ejecuta una vez y no N veces, segun los registros que tenga la tabla. Ademas de que pueden dejar de utilizarse los indices al aplicar funciones a los campos.

En el ejemplo de arriba, Fecha es el campo, y le he quitado la funcion para seleccionar valores dentro de un rango, es una instruccion equivalente a la que posteo RobertGustavo solo que optimizada.



Saludos a ambos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #9 (permalink)  
Antiguo 03/12/2008, 10:06
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

Si, tienes razon. El uso de funciones en el where sobre campos es un detalle que no habia tomado en cuenta.
Gracias a los dos por este dato. Vere si puedo optimizar algunos de mis scripts.
Por cierto, mi nombre es Flavio.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #10 (permalink)  
Antiguo 04/12/2008, 08:24
Avatar de robertgustavo  
Fecha de Ingreso: marzo-2008
Ubicación: Camaná - Arequipa
Mensajes: 213
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: SELECCIONAR registros por fecha - MES (MONTH)

creo que me deberia mover este tema a .NET , pero el que este en ello, que me apoye.
Les explico mejor, tengo mi tabla ventas, lo que quiero es : seleccionar las ventas por mes, es decir en un windows form, un combobox donde seleccionen el mes y les muestre la cantidad de ventas por mes y la ganancia de que se recaudo ese mes, u cuantos productos fueron vendidos.
Esoy haciendo lo que son las estadisticas, en mi programa.
__________________
Soluciones basadas en .NET Framework y SQL Server
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 05:01.