lunes, 17 de enero de 2011

Un ejemplo de como realizar calculos con fechas con sql

Hace unos dias me llegó un mail de esos tipicos mails cadena que supuestamente traen suerte si se lo envias a 20 personas mas. Claramente estos mails no tienen sustento real en general y actuan por ingenieria social como mecanismo de generación de tráfico basura. Rara vez alcanzo a leer mas de 2 lineas antes de borrarlos, pero en este caso me llamó la atención y despertó mi curiosidad, ya que probar su veracidad con una consulta sql seria muy facil. Claramente esto no tiene ninguna utilidad mas que mostrarles como resolver cuestiones y relaciones de fechas usando, en este caso Oracle, como una
calculadora extremadamente costosa.

El mail decia algo asi: "Este año el mes de julio tiene 5 viernes, 5 sabados y 5 domingos, esto se da cada 823 años, esto se denomina saco de dinero, envia esto a 20 amigos... bla bla bla". Cuando lo leí, me dí cuenta que no podia ser real ya que tener esa periodicidad tan exacta y extensa, tratandose de fechas, no era posible. Para probarlo prolijamente, realicé una consulta de forma tal de generar fechas automaticamente, comenzando desde una fecha bien lejana (500000 años hacia atrás) y sumando cada vez que el mes fuera Julio (07) los dias viernes, sabado y domingo (6,7,1). Si la suma es 15 entonces en ese año se da que lo que reza el mail en cuestión. A continuación les muestro la consulta y el resultado:


select to_char(dt,'YYYY') dt,count(1)
from (select sysdate-500000+rownum dt
from dual
connect by rownum <= 500000)
where to_char(dt,'MM') = '07'
and to_char(dt,'d') in (6,7,1)
group by to_char(dt,'YYYY')
having count(1) > 14
order by to_number(dt) desc

1 2005 15
2 1994 15
3 1988 15
4 1983 15
5 1977 15
6 1966 15
7 1960 15
8 1955 15
9 1949 15
10 1938 15
11 1932 15
12 1927 15
13 1921 15
14 1910 15
15 1904 15
16 1898 15
17 1892 15
18 1887 15
19 1881 15
20 1870 15

Como se ve, en el 2005 se dió por ultima vez la relación citada, pasaron solo 6 años para que se repita y no 823!!!.

1 comentario:

  1. Me encantó mi amigo, tabién leí el mail, y creo que lo tengo por ahí o en la papelera, roomendaré el link acuien me los reenvió

    PD, estaba buscando como calcular años anteriores por SQL y me salió to blog, igual no fue tiempo perdido el mio. Saludos!

    ResponderEliminar