SQL--Where fechas (Condición de fechas)

Iniciado por noobdai, 4 Marzo 2010, 19:53 PM

0 Miembros y 7 Visitantes están viendo este tema.

noobdai


^Tifa^

Si te inclinas por crear un procedimiento con lo siguiente como contenido... podria servirte  :rolleyes:  Donde la fecha puede pasar como parametro.

Código (sql) [Seleccionar]


SQL> select * from ejemplo;

FECHA        SALARIO
--------- ----------
20-JAN-09      23000
15-JAN-09      14000
28-FEB-09      20000
15-FEB-08      20000
13-JAN-08      25000
27-DEC-09      20000
16-DEC-09      25000
10-DEC-09      18000

8 rows selected.

SQL> DECLARE
  2  SUMA INTEGER;
  3  BEGIN
  4  FOR a IN 0..12
  5  LOOP
  6  SELECT COUNT(SALARIO) INTO SUMA FROM EJEMPLO WHERE FECHA > '31-DEC-08' AND SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;
  7  DBMS_OUTPUT.PUT_LINE('El mes :: '||a||' Tiene '||suma||' Registros');
  8  END LOOP;
  9  END;
10  /
El mes :: 0 Tiene 0 Registros
El mes :: 1 Tiene 2 Registros
El mes :: 2 Tiene 1 Registros
El mes :: 3 Tiene 0 Registros
El mes :: 4 Tiene 0 Registros
El mes :: 5 Tiene 0 Registros
El mes :: 6 Tiene 0 Registros
El mes :: 7 Tiene 0 Registros
El mes :: 8 Tiene 0 Registros
El mes :: 9 Tiene 0 Registros
El mes :: 10 Tiene 0 Registros
El mes :: 11 Tiene 0 Registros
El mes :: 12 Tiene 3 Registros

PL/SQL procedure successfully completed.



Tenia tiempo que no tocaba PL/SQL

noobdai

Cita de: ^TiFa^ en  5 Marzo 2010, 01:39 AM
Si te inclinas por crear un procedimiento con lo siguiente como contenido... podria servirte  :rolleyes:  Donde la fecha puede pasar como parametro.

Código (sql) [Seleccionar]


SQL> select * from ejemplo;

FECHA        SALARIO
--------- ----------
20-JAN-09      23000
15-JAN-09      14000
28-FEB-09      20000
15-FEB-08      20000
13-JAN-08      25000
27-DEC-09      20000
16-DEC-09      25000
10-DEC-09      18000

8 rows selected.

SQL> DECLARE
  2  SUMA INTEGER;
  3  BEGIN
  4  FOR a IN 0..12
  5  LOOP
  6  SELECT COUNT(SALARIO) INTO SUMA FROM EJEMPLO WHERE FECHA > '31-DEC-08' AND SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;
  7  DBMS_OUTPUT.PUT_LINE('El mes :: '||a||' Tiene '||suma||' Registros');
  8  END LOOP;
  9  END;
10  /
El mes :: 0 Tiene 0 Registros
El mes :: 1 Tiene 2 Registros
El mes :: 2 Tiene 1 Registros
El mes :: 3 Tiene 0 Registros
El mes :: 4 Tiene 0 Registros
El mes :: 5 Tiene 0 Registros
El mes :: 6 Tiene 0 Registros
El mes :: 7 Tiene 0 Registros
El mes :: 8 Tiene 0 Registros
El mes :: 9 Tiene 0 Registros
El mes :: 10 Tiene 0 Registros
El mes :: 11 Tiene 0 Registros
El mes :: 12 Tiene 3 Registros

PL/SQL procedure successfully completed.



Tenia tiempo que no tocaba PL/SQL

Muchas gracias Tifa te lo has currado  ;-) pero necesito que sea SQL ya que PL/SQL no lo hemos tocado en clase. :(

^Tifa^

Pues puro SQL

Código (sql) [Seleccionar]


SELECT COUNT(SALARIO) INTO SUMA FROM EJEMPLO WHERE FECHA > '31-DEC-08' AND SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;




noobdai

Cita de: ^TiFa^ en  5 Marzo 2010, 13:22 PM
Pues puro SQL

Código (sql) [Seleccionar]


SELECT COUNT(SALARIO) INTO SUMA FROM EJEMPLO WHERE FECHA > '31-DEC-08' AND SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;





Nuca había utilizado "SUBSTR"..mmm lo probaré :-\
Gracias Saludos ;D

^Tifa^

#15
Bueno en el caso que expuse, utilize SUBSTR por la siguiente razon:

Código (sql) [Seleccionar]

(TO_CHAR(FECHA, 'DD/MM/YY'))


Eso bien sabes retorna la fecha como '00/00/0000' en vez de '00-MES-00'

Y utilizo SUBSTR para que empieze a contarme en el caracter numero 4 hacia la derecha, y me cuente solo 2 posiciones.. 4 y 5 que corresponde al mes. Fijate:

25/02/2009

Donde:

25 : Es el dia del mes, corresponde a 2 caracteres que son caracter 1 = 2 y caracter 2 = 5

/ : Barra de separacion de la fecha corresponde al caracter numero 3

02 : Mes correspondiente del año, donde el 0 = 4 caracter y el 2 = 5 caracter.

Como solo requiero en mi caso, el mes del año del que se habla, solo tomo 2 caracteres a partir del 4 caracter leido  ;) (Por eso uso SUBSTR)

Código (sql) [Seleccionar]

SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2) = a;


El resultado final de SUBSTR((TO_CHAR(FECHA, 'DD/MM/YY')), 4, 2)  es 02 que corresponde a Febrero, = a  'a' es una variable que contiene un valor entero, en tu caso puedes sustituir a 'a' por un numero entero del mes, en este caso si coloco en su lugar 02 y existen registros en la tabla del mes FEBRERO se contaran todos y se retornara al finalize que para el mes 2 (FEBRERO) existen X cantidad de registros...

Un saludo  ;)

noobdai