FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
como hacer consulta SQL con fecha usando Between
Hola, un saludo a todos los que lean este hilo.
antes que nada me presento, me llamo Eduardo, soy de México Tengo un problema y quisiera ver si alguien ha pasado por lo mismo y si logro solucionar el problema me pueda ayudar. Mi situación radica en que... estoy haciendo un sistema para el control de Infracciones (Multas a conductores), entre las tantas consultas que he realizado con Delphi 5 y SQL encontre un problema al momento de intentar hacer una consulta donde me muestre a las personas que han sido Infraccionadas en cierto mes. Por ejemplo, ahora es septiembre y me gustaria saber que personas fueron infraccionadas en Marzo. Tengo una consulta en la que puedo ver a los que fueron infraccionados en un dia específico, utilizo como parametro de búsqueda un control DateTimePicker1, mi consulta queda asi: Código:
SELECT CONTEOINFRACCIONES.NUM_CONDUCTOR,FOLIOULTIMAINFRACCION,INFRACCION.NUMFOLIO, FECHAULTIMAINFRACCION, VECESINFRACCIONADO,NOMBRE, APE_PAT,APE_MAT,CONDUCTOR.NUM_CONDUCTOR, LICENCIA, NUMFOLIO, STATUS, FECHAINFRACCION, NUMINFRACCION FROM CONTEOINFRACCIONES, CONDUCTOR, INFRACCION WHERE VECESINFRACCIONADO>=1 AND CONTEOINFRACCIONES.NUM_CONDUCTOR = CONDUCTOR.NUM_CONDUCTOR AND FOLIOULTIMAINFRACCION=NUMFOLIO AND STATUS ='NO PAGADO' AND FECHAULTIMAINFRACCION =:FECHA Tengo otra que es para saber cuales fueron infraccionados en el mes actual, me quedo de la siguiente manera: Código:
SELECT CONTEOINFRACCIONES.NUM_CONDUCTOR,FOLIOULTIMAINFRACCION,INFRACCION.NUMFOLIO, FECHAULTIMAINFRACCION, VECESINFRACCIONADO,NOMBRE, APE_PAT,APE_MAT,CONDUCTOR.NUM_CONDUCTOR, LICENCIA, NUMFOLIO, STATUS, FECHAINFRACCION, NUMINFRACCION FROM CONTEOINFRACCIONES, CONDUCTOR, INFRACCION WHERE VECESINFRACCIONADO>=1 AND CONTEOINFRACCIONES.NUM_CONDUCTOR = CONDUCTOR.NUM_CONDUCTOR AND FOLIOULTIMAINFRACCION=NUMFOLIO AND STATUS ='NO PAGADO' AND FECHAULTIMAINFRACCION BETWEEN :FECHAMENOS AND :FECHAMAS procedure TESTADISTICAINFRACCIONES.BitBtn1Click(Sender: TObject); VAR MAS, MENOS,MES:tdatetime; begin //defino las variables MAS:=IncMonth(DATE,1); MENOS :=IncMonth(DATE,-1); y ya en mi query las jalo asi Código:
QUERY4.CLOSE; QUERY4.Params[0].AsDate := MENOS; QUERY4.Params[1].AsDate := MAS; QUERY4.OPEN; Creo que si alguien me ayuda a solucionar el problema anterior, podré utilizar mas o menos el mismo tipo de consultar para solucionar mi problema principal que es el de buscar las personas infraccionadas en un mes en específico. Creo que necesito saber de forma automatica el primer dia y el ultimo dia del mes (MES SELECCIONADO PARA LA CONSULTA) para así poder hacer un Between en SQL con la fecha proporcionada y podiendo calcular de antemano su primer dia y su ultimo dia del mes. Ojala me haya podido explicar bien y me puedan comprender sobre la duda que tengo y vaya... mejor aun, que alguien me pueda ayudar. Saludos |
#2
|
||||
|
||||
Bienvenido Eduardo:
Para el mes actual, prueba a utilizar las funciones DecodeDate y EncodeDate. Para el final de mes, incrementas el mes en 1, pones el día en 1,le restas uno y tienes el final de mes. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
|||
|
|||
compañero marcoszorrilla, muchisimas gracias por su ayuda, me ha servido de mucho
Ya me las iré arreglando con la otra consulta, solo es cuestion de ajustes, muchas gracias. espero en algun momento poder devolverte el favor |
#4
|
||||
|
||||
que tal MaSSaKKre, una pregunta que BD utilizas, ya se que es SQL pero, ¿podrias ser un poco mas específico?.
¿tu BD no acepta la función moth ?. porque tambien lo podrias generar así:
algo pasa, mejor te lo pongo tambien por fuera, ya que me pone algo de size where month( FECHAULTIMAINFRACCION) =: Mes Saludos. Vicente López. Tambien de México. |
#5
|
|||
|
|||
hola chente,...
si, mira mi consulta quedo lista anoche gracias a la ayuda de mascorrilla y quedo asi Código:
VAR MAS,SUM,MENOS:tdatetime; dia,mes,anno:Word; begin DecodeDate(Date,anno,mes,dia); MAS:=EncodeDate(anno,mes,1); //GUARDANDO MES ACTUAL CON DIA 1 SUM:=IncMonth(MAS,1);//SUMANDOLE UN MES AL MES ACTUAL MENOS:=SUM-1; //RESTANDOLE UN DIA AL MES ACTUAL+1 (OSEA MES SIGUIENTE AL ACTUAL) EDIT1.TEXT:=DATETOSTR(MAS); EDIT2.TEXT:=DATETOSTR(MENOS); QUERY4.CLOSE; QUERY4.Params[0].AsDate := MAS; QUERY4.Params[1].AsDate := MENOS; QUERY4.OPEN; y el código en sql me quedo asi Código:
SELECT CONTEOINFRACCIONES.NUM_CONDUCTOR,FOLIOULTIMAINFRACCION,INFRACCION.NUMFOLIO, FECHAULTIMAINFRACCION, VECESINFRACCIONADO,NOMBRE, APE_PAT,APE_MAT,CONDUCTOR.NUM_CONDUCTOR, LICENCIA, NUMFOLIO, STATUS, FECHAINFRACCION, NUMINFRACCION FROM CONTEOINFRACCIONES, CONDUCTOR, INFRACCION WHERE VECESINFRACCIONADO>=1 AND CONTEOINFRACCIONES.NUM_CONDUCTOR = CONDUCTOR.NUM_CONDUCTOR AND FOLIOULTIMAINFRACCION=NUMFOLIO AND STATUS ='NO PAGADO' AND FECHAULTIMAINFRACCION BETWEEN :FECHAMAS AND :FECHAMENOS muchas gracias por tu interes en ayudarme amigo. Estoy usando Delphi 5... ahi arribita lo especifiqué, solo que como la page se hace muy grande, entonces no se alcanza a ver. por cierto ando con otro problemita en una consulta, pero aun me sigo calentando la cabeza, creo que cuando ya de plano no pueda tendre que dar un grito de ayuda jejejeje Eduardo... Saludos |
|
|
|