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

SQL, obtener el semestre de una fecha.

Estas en el tema de SQL, obtener el semestre de una fecha. en el foro de Bases de Datos General en Foros del Web. Hola, como soy nuevo primero q todo los felicito por el foro ya q me ha ayudado mucho y espero yo poder ayudar a otro ...
  #1 (permalink)  
Antiguo 16/03/2005, 08:07
Avatar de Pipe_GS  
Fecha de Ingreso: marzo-2005
Ubicación: Frente al PC
Mensajes: 46
Antigüedad: 19 años, 9 meses
Puntos: 0
SQL, obtener el semestre de una fecha.

Hola, como soy nuevo primero q todo los felicito por el foro ya q me ha ayudado mucho y espero yo poder ayudar a otro tb. Ahora al grano:

Estoy usando el editor de SQL q viene con el TOAD y necesito q se me cree una columna llamada SEMESTRE en el cual segun la fecha_transaccion se me agregue un 1 o un 2 (1=de ene-jun y 2=de jul-dic).
Lo mas raro es q puedo sacar el n° del mes, el año, el trimestre y hasta el siglo, pero no pasa na' con el semestre. Les dejo el codigo q estoy usando:


select tabla.FECHA_TRANSACCION,

to_number (to_char (tabla.FECHA_TRANSACCION, 'yyyy')) as Año,
to_number (to_char (tabla.FECHA_TRANSACCION, 'q')) as Trimestre,
to_number (to_char (tabla.FECHA_TRANSACCION, 'mm')) as Mes,
to_number (to_char (tabla.FECHA_TRANSACCION, '????')) as Semestre

from APPS.CAL_VENTA_ESTADISTICA tabla
where FECHA_TRANSACCION > '31-dic-2002' AND FECHA_TRANSACCION < '01-ene-2004'


Ahi esta mi dilema, si alguien sabe como solucionarme ese problema se lo agradeceria mucho.
Tb estoy ocupando el SQL Server enterprise manager, pero esos codigos no me los pesca, me pasa tirando errores, asi q si alguien cacha como hacerlo en el Sql Server tb podria ser una opcion.
Por su atencion y pronta colaboracion, muchas gracias.
  #2 (permalink)  
Antiguo 16/03/2005, 11:00
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 10 meses
Puntos: 1
Pues creo que directamente no hay metodo de saber el semestre, pero haciendo unas pocas cuentas podrias conseguir lo que te propones:

Código:
( (to_number (to_char (tabla.FECHA_TRANSACCION, 'mm')) - 1) / 6) + 1 as Semestre
El "-1" es para que los meses "empiecen" a contarse desde 0 (enero = 0). Luego divides entre 2 y eso te saldria 0 si estuvieras en el primer semestre y 1 en el segundo. Por último sumas 1 para conseguir que el primer semestre sea 1 y el segundo 2. Por supuesto, esto solo te funcionará si la division ( / ) es una division entera, es decir, que:

Código:
0 / 6 = 0
1 / 6 = 0
...
5 / 6 = 0
6 / 6 = 1
7 / 6 = 1
...
Si no fuera el caso tendrias que hacer algun casting a entero (no se la sintaxis exacta, pero seguro que hay una funcion del estilo "to_int"), en cuyo caso tendrias que hacer:

Código:
to_int( (to_number (to_char (tabla.FECHA_TRANSACCION, 'mm')) - 1) / 6) + 1 as Semestre
Espero que te sea util

Zerjillo
  #3 (permalink)  
Antiguo 16/03/2005, 13:00
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 9 meses
Puntos: 7
creo que seria mas facil usar el "case" no recuerdo la sintaxis muy bien pero seria algo asi
select
case
when to_number (to_char (tabla.FECHA_TRANSACCION, 'mm')) between 1 and 6 then 1
when to_number (to_char (tabla.FECHA_TRANSACCION, 'mm')) between 7 and 12 then 2
from APPS.CAL_VENTA_ESTADISTICA tabla
where FECHA_TRANSACCION > '31-dic-2002' AND FECHA_TRANSACCION < '01-ene-2004'
__________________
Blogzote.com :-) Mi blog
  #4 (permalink)  
Antiguo 16/03/2005, 13:54
Avatar de Pipe_GS  
Fecha de Ingreso: marzo-2005
Ubicación: Frente al PC
Mensajes: 46
Antigüedad: 19 años, 9 meses
Puntos: 0
Vale muchachos, sus explicaciones = me sirven para seguir trabajando.
Y tal como lo dijo ZERJILLO debe haber una funcion q me los transforme a enteros, una muestra de como quedaron los semestres esta en el link de mas abajo.
La interrogante queda planteada, yo seguire buscando, voy a tasar manuales y consultar por internet y si algun hacker se acuerda del comando por fa q lo postee, de antemano gracias.

Tabla

P.D.: El sitio es la raja !
  #5 (permalink)  
Antiguo 16/03/2005, 15:57
Avatar de Pipe_GS  
Fecha de Ingreso: marzo-2005
Ubicación: Frente al PC
Mensajes: 46
Antigüedad: 19 años, 9 meses
Puntos: 0
¡ Listo kbros!
Joteando y joteando harto rato con una cacha de comandos al final salio la kga, asi q le agradezco a ZERJILLO y a KIKOLICE por sus wenos aportes y aprovecho y les dejo el codigo para q en otras ocasiones ustedes no tengan drama, y cuando lovean se daran cuanta de q era mas obvio de lo q debio ser:

select tabla.FECHA_TRANSACCION,

to_number (to_char (tabla.FECHA_TRANSACCION, 'yyyy')) as Año,
to_number (to_char (tabla.FECHA_TRANSACCION, 'q')) as Trimestre,
to_number (to_char (tabla.FECHA_TRANSACCION, 'mm')) as Mes,
floor (((to_char (tabla.FECHA_TRANSACCION, 'mm')) - 1) / 6) + 1 as semestre

from APPS.CAL_VENTA_ESTADISTICA tabla
where FECHA_TRANSACCION > '31-dic-2002' AND FECHA_TRANSACCION < '01-ene-2004'


El FLOOR te deja los numeros como enteros, otro el el MOD q te devuelve el resto de tu division.

Chao y gracias... totales.
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 00:24.