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

Sigo con problemas con las fechas uy uy uy!

Estas en el tema de Sigo con problemas con las fechas uy uy uy! en el foro de SQL Server en Foros del Web. Hola Gente Del Foro, Antes Que Nada Queria Agradecerles Porque Seguramente Alguien Me Podra Ayudar, Tengo Un Problema En Sql Con El Manejo Entre Fechas ...
  #1 (permalink)  
Antiguo 30/07/2007, 14:24
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Sigo con problemas con las fechas uy uy uy!

Hola Gente Del Foro, Antes Que Nada Queria Agradecerles Porque Seguramente Alguien Me Podra Ayudar, Tengo Un Problema En Sql Con El Manejo Entre Fechas Que No Puedo Solucionar:
Quiero crear un Stored Procedure que me genere en el que muestro varios datos y debo crear uno nuevo, para esto Tengo Un Campo Fecha Por Ej: 08/11/1976 Y Otro Campo Que Podria Ser El 28/06/2004.
El Problema Es El Siguiente, Tengo Que Poner En Otro Campo La Cantidad De Años, Meses Y Dias Que Hay Entre Ambas Fechas
Por Ejemplo: "20 Años, 10 Meses Y 3 Dias"
(incluir las palabras "años, Meses Y Dias" No Es Lo Dificil), El Problema Real Es Que Haciendo Un Datediff, Tira Este Inconveniente:
Por Ejemplo: Entre El 23/12/2003 Y El 11/02/2005 En Años, Me Muestra Dos Años De Diferencia Cuando En Realidad No Pasaron Dos Años Entre Una Y Otra fecha, Y Ni Hablar De Los Meses Y Dias
(Y Existen entre ambos Tambien Los Años Bisiestos),
Si Pueden Contactarse Conmigo, O Ayudarme De Alguna Manera Me Ayudarian realmente, Desde Ya les Agradezco Y Mando Un Abrazo De Todo Corazon.
  #2 (permalink)  
Antiguo 30/07/2007, 18:00
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
Re: Sigo con problemas con las fechas uy uy uy!

Alguna vez me pidieron calcular la fecha de nacimiento en AÑO, MES, DIAS, aqui el query:
declare @años as integer
declare @meses as integer
declare @dias as integer
declare @fecha as datetime
declare @hoy as datetime

set @fecha = '19600407'
set @hoy = getdate()
set @años = datediff("yy", @fecha, @hoy)
if dateadd("yy", @años, @fecha) > @hoy set @años = @años - 1
set @fecha = dateadd("yy", @años, @fecha)
set @meses = datediff("mm", @fecha, @hoy)
if dateadd("mm", @meses, @fecha) > @hoy set @meses = @meses - 1
set @fecha = dateadd("mm", @meses, @fecha)
set @dias = datediff("dd", @fecha, @hoy)
set @fecha = dateadd("dd", @dias, @fecha)
print 'Tu edad es de ' + ltrim(str(@años)) + ' años ' + ltrim(str(@meses)) + ' meses y ' + ltrim(str(@dias)) + ' días.'

Te sugiero que las fechas las manejes siempre en formato ANSI, yyyymmdd

Saludos
  #3 (permalink)  
Antiguo 31/07/2007, 14:32
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Sigo con problemas con las fechas uy uy uy!

Espectacular!!!, lo probe y funciona joya, pero solo me surgio un ultimo problema, como hago para que en la cadena de texto donde se introduce la fecha ('19600702'), aparezca un campo de la tabla nacimiento llamado fecha_nacimiento?
  #4 (permalink)  
Antiguo 31/07/2007, 18:25
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
Re: Sigo con problemas con las fechas uy uy uy!

¿Que?, pues debes crear o una FUNCION o un STORE PROCEDURE con el codigo que te di y pasarle como parametro, la fecha de tu tabla, asi de simple.
  #5 (permalink)  
Antiguo 31/07/2007, 20:06
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Sigo con problemas con las fechas uy uy uy!

Disculpas, me exprese mal, la idea del stored procedure que intento crear es de que en un campo llamado edad por ejemplo, me cargue en forma automatica los resultadosde la operacion anterior, no pasarle los datos de a uno, sino que tome todos los valores de la fecha de nacimiento y en otra columna tire los resultados de esa operacion, por ejemplo:

id fecha de nacimiento edad
1 08/11/1976 30 años, 9 meses, 23 dias
2 12/12/1978 28 años, x meses, xx dias
.. ................. .......................................


intento evitar la cadena ('19761108') por algo similar a esto, [fecha_de_nacimiento] pero lo probe y no funciono, espero ahora si haber sido claro pero es medio dificil de explicar, IGUALMENTE, MUCHAS GRACIAS POR LO QUE YA ME AYUDASTE HASTA EL MOMENTO.
  #6 (permalink)  
Antiguo 01/08/2007, 07:07
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Sigo con problemas con las fechas uy uy uy!

puedes crear una funcion de usuario en lugar del sp... (sintaxis en libros de ayuda de SQL Server).

y con ella podrias hacer los siguiente....

Código:
Select Id, [Fecha de nacimiento], dbo.fnGetEdad([fecha de nacimiento])
from   mitabla
__________________
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; 01/08/2007 a las 07:16
  #7 (permalink)  
Antiguo 01/08/2007, 12:19
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
Re: Sigo con problemas con las fechas uy uy uy!

¿Que dije yo?

-- Se crea la funcion
CREATE FUNCTION fn_CalculaEdad (@fecha varchar(8))
RETURNS VARCHAR(50)
AS
BEGIN
declare @años as integer
declare @meses as integer
declare @dias as integer
--declare @fecha as datetime
declare @hoy as datetime


-- set @fecha = '19600407'
set @hoy = getdate()
set @años = datediff(yy, @fecha, @hoy)
if dateadd(yy, @años, @fecha) > @hoy set @años = @años - 1
set @fecha = dateadd(yy, @años, @fecha)
set @meses = datediff(mm, @fecha, @hoy)
if dateadd(mm, @meses, @fecha) > @hoy set @meses = @meses - 1
set @fecha = dateadd(mm, @meses, @fecha)
set @dias = datediff(dd, @fecha, @hoy)
set @fecha = dateadd(dd, @dias, @fecha)
--print 'Tu edad es de ' + ltrim(str(@años)) + ' años ' + ltrim(str(@meses)) + ' meses y ' + ltrim(str(@dias)) + ' días.'
RETURN(ltrim(str(@años)) + ' años ' + ltrim(str(@meses)) + ' meses y ' + ltrim(str(@dias)) + ' días.')
END

-- Para hacer referencia a ella
CREATE TABLE #ALUMNOS (Nombre VARCHAR(50), Fecha_Nacimiento VARCHAR(10))
INSERT INTO #ALUMNOS VALUES('ISAIAS ISLAS', '19600407')
INSERT INTO #ALUMNOS VALUES('ADRIANA MENDEZ', '19720205')
INSERT INTO #ALUMNOS VALUES('BRITNEY SPEARS', '19821004')


SELECT Nombre, dbo.fn_CalculaEdad(Fecha_Nacimiento) FROM #ALUMNOS

Resultados:

ISAIAS ISLAS 47 años 63 meses y 1851 días.
ADRIANA MENDEZ 35 años 65 meses y 1853 días.
BRITNEY SPEARS 24 años 57 meses y 1854 días.
  #8 (permalink)  
Antiguo 01/08/2007, 12:20
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
Re: Sigo con problemas con las fechas uy uy uy!

opssssss, no me gusto el RESULTADO, ejejejejeejej, checando...........
  #9 (permalink)  
Antiguo 01/08/2007, 12:34
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
Re: Sigo con problemas con las fechas uy uy uy!

Listo, perdon por la burrada, se debe pasar la FECHA DE NACIMIENTO como DATETIME y como el GETDATE(), no esta permitido en una funcion, se pasa como parametro.

-- Se crea la funcion
ALTER FUNCTION fn_CalculaEdad (@fecha datetime, @hoy as datetime)
RETURNS VARCHAR(50)
AS
BEGIN
declare @años as integer
declare @meses as integer
declare @dias as integer
--declare @fecha as datetime
-- declare @hoy as datetime


--set @fecha = '19600407'
-- set @hoy = getdate()
set @años = datediff(yy, @fecha, @hoy)
if dateadd(yy, @años, @fecha) > @hoy
set @años = @años - 1
set @fecha = dateadd(yy, @años, @fecha)
set @meses = datediff(mm, @fecha, @hoy)
if dateadd(mm, @meses, @fecha) > @hoy
set @meses = @meses - 1
set @fecha = dateadd(mm, @meses, @fecha)
set @dias = datediff(dd, @fecha, @hoy)
set @fecha = dateadd(dd, @dias, @fecha)
--print 'Tu edad es de ' + ltrim(str(@años)) + ' años ' + ltrim(str(@meses)) + ' meses y ' + ltrim(str(@dias)) + ' días.'
RETURN(ltrim(str(@años)) + ' años ' + ltrim(str(@meses)) + ' meses y ' + ltrim(str(@dias)) + ' días.')
END

-- Para hacer referencia a ella
CREATE TABLE #ALUMNOS (Nombre VARCHAR(50), Fecha_Nacimiento VARCHAR(10))
INSERT INTO #ALUMNOS VALUES('ISAIAS ISLAS', '19600407')
INSERT INTO #ALUMNOS VALUES('ADRIANA MENDEZ', '19720205')
INSERT INTO #ALUMNOS VALUES('BRITNEY SPEARS', '19821004')


SELECT Nombre, dbo.fn_CalculaEdad(Fecha_Nacimiento, GETDATE()) FROM #ALUMNOS

Resultados (Correctos):

Nombre
-------------------------------------------------- --------------------------------------------------
ISAIAS ISLAS 47 años 3 meses y 25 días.
ADRIANA MENDEZ 35 años 5 meses y 27 días.
BRITNEY SPEARS 24 años 9 meses y 28 días.
  #10 (permalink)  
Antiguo 01/08/2007, 13:09
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Sigo con problemas con las fechas uy uy uy!

Ok, solo ratifique lo que comentabas porque nuestro compañero andaba algo confundido...

recibe un saludo!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #11 (permalink)  
Antiguo 01/08/2007, 13:20
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
Re: Sigo con problemas con las fechas uy uy uy!

Andres95

Bueno, bueno, no es para tanto, solo que cuando publique mi respuesta "tenia unas ganas de hacer la funcion", que no la publique, tu comentario me sirvio para hacer la posta completa.

Gracias y saludos.
  #12 (permalink)  
Antiguo 01/08/2007, 13:29
Avatar de lanzi  
Fecha de Ingreso: noviembre-2005
Ubicación: BUENOS AIRES
Mensajes: 55
Antigüedad: 18 años, 5 meses
Puntos: 0
Re: Sigo con problemas con las fechas uy uy uy!

Unos mostros!!!, la verdad que me dejaron sin palabras, ante la falta de personal en mi trabajo, incursione en el tema de las bases de datos y a fuerza de algun tutorial por internet y algun libro barato (comprado por mi), me puse con el sql server pero me quedan muchas dudas siempre y es bueno saber que hay gente del otro lado que puede darnos una mano gigante en el momento oportuno, nuevamente MUCHAS GRACIAS!!! (en mayusculas y negrita) y nos vemos pronto.
  #13 (permalink)  
Antiguo 01/08/2007, 13:36
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Re: Sigo con problemas con las fechas uy uy uy!

ok, te dejo las ligas de un tutorial de SQL... espero te sirva..


Parte 1

Parte 2

Parte 3

Parte 4

__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #14 (permalink)  
Antiguo 01/08/2007, 16:31
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
Re: Sigo con problemas con las fechas uy uy uy!

Lanzi

Que no es para tanto, simplemente en este y muchos otros foros encontraras gente que le gusta compartir sus experiencias con este motor (sql server).

Cuenta con mi experiencia de 27 años en este negocio (NO HAGAN CUENTAS, soy generacion 80, cuando muchos de ustedes aun no nacian), pero tampoco exageren, no conoci las TARJETAS PERFORADAS.

Aunque si PASCAL, FORTRAN, BASIC, RPG, DBase IV (jeejejejejejjejeje).

Saludos.
  #15 (permalink)  
Antiguo 20/10/2007, 21:16
 
Fecha de Ingreso: octubre-2007
Mensajes: 1
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Sigo con problemas con las fechas uy uy uy!

Disculpen si desvirtuo el tema, es que la desesperacion me lleva esto...

como les va, soy nuevo aca y tengo una consulta:

tengo que hacer lo siguente y no se por donde empesar, algunos de los tutoriales que lei no me dicen nada, y buscando en internet llegue a este thread:

1)crear una tabla (tarja)con


id_movimiento(int) autoincremental
ingreso datetime
egreso datetime
legajo int

2)determinar la cantidad de horas trabajadas por legajo
realizar un stored procidio donde ingrsando el numero de legajos devuelva la cantidad de horas trabajadas

ayuda: utilizar datediff()

esto lo tengo que hacer en el sql 7, en el query analizer

un saludo, desde ya muchas gracias
  #16 (permalink)  
Antiguo 21/10/2007, 13:00
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Sigo con problemas con las fechas uy uy uy!

No tas viendo que IISLAS nos expresa su ya avanzada edad y tu poniendolo preguntas fuera de ordeeen?? que no ves que se nos desmaya?? jajaja IISLAS!!! amigo, toy bromeando.... :p yo tambien toy algo oxidado ya!


Mi estimado tincho... si te entendí bien lo que quieres es por numero de legajo la cantidad de horas trabajadas.... esto es ¿total?

Si es así ahi te va mi aporte...

Código:
Select Legajo, Sum(DateDiff(Hour, Ingreso, Egreso))
From Movimientos
Group By Legajo

Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
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 20:52.