Query me traiga el la fecha de cumpleaños

Hola estimados gusto en saludarles, les tengo una consulta que quizás puedan colaborarme.

Requiero un Query que me muestre todos los contactos de X SN que estén cumpliendo años HOY. Actualmente tengo este que es el que requiero pero no me esta mostrando nada porque esta ligando lo actual y no la fecha del contacto.

Podrían ayudarme por favor.

SELECT T1."CardCode", T1."CardName", T0."SlpName",T1."U_NAV_Cartera",  T2."Name", T2."BirthDate" FROM OSLP T0  INNER JOIN OCRD T1 ON T0."SlpCode" = T1."SlpCode" INNER JOIN OCPR T2 ON T1."CardCode" = T2."CardCode" WHERE DAYS_BETWEEN ( T2."BirthDate",CURRENT_TIMESTAMP)=0

Hola @LuiskSiles
Creo que el problema en tu query es que la función DAYS_BETWEEN te dará la cantidad de días transcurridos entre la fecha de nacimiento y el día de hoy, por lo tanto nunca cumplirá tu condición de que sea igual a cero.

Quizá podrías comparar solo el mes y día de nacimiento, contra el mes y día actual.

1 me gusta

@cdeleon Muchas gracias por tu pronta respuesta. Justamente eso es lo que necesito, tienes idea de como comparo solo el mes y día de nacimiento, contra el mes y día actual ???

Podrías hacer una comparación similar a esta

WHERE DATEFROMPARTS(YEAR(GETDATE(), MONTH(T2.BirthDate), DAY(T2.BirthDate)) =GETDATE()

De esta manera si lo corres como una alerta, solo te saldrían las personas que cumplan años ese día.

1 me gusta

@cdeleon

Tu query esta en SQL ??? Te consulto porque me genera error y lo he intentado convertir y no me deja. Aclaro que uso Hana.

SELECT T1."CardCode", T1."CardName", T0."SlpName",T1."U_NAV_Cartera",  T2."Name", T2."BirthDate" 

FROM OSLP T0  INNER JOIN OCRD T1 ON T0."SlpCode" = T1."SlpCode" INNER JOIN OCPR T2 ON T1."CardCode" = T2."CardCode"

WHERE DATEFROMPARTS(YEAR(GETDATE(), MONTH(T2.BirthDate), DAY(T2.BirthDate)) =GETDATE()

@LuiskSiles es correcto yo tengo la versión SQL,

Creo en HANA no te funcionara el GETDATE() pero tienes el CURRENT_DATE.
y en lugar de YEAR(), MONTH() o DAY() tendrías que usar EXTRACT(DAY FROM ) , EXTRACT(MONTH FROM ), EXTRACT(YEAR FROM)

1 me gusta

@cdeleon

Agradezco mucho tu valiosa ayuda. Entendiendo lo que me indicas replico lo que me indicas sin embargo no me esta generando ningún resultado incluso ni error muestra. Será que estoy aplicando algo mal. Agradezco la ayuda.

SELECT T1."CardCode", T1."CardName", T0."SlpName",T1."U_NAV_Cartera",  T2."Name", T2."BirthDate" 

FROM OSLP T0  INNER JOIN OCRD T1 ON T0."SlpCode" = T1."SlpCode" INNER JOIN OCPR T2 ON T1."CardCode" = T2."CardCode"

WHERE DATEFROMPARTS(EXTRACT(YEAR FROM) (CURRENT_DATE(), EXTRACT(MONTH FROM ) (T2."BirthDate"), EXTRACT(DAY FROM ) (T2."BirthDate")) =CURRENT_DATE()

Creo que el detalle lo tienes en los paréntesis.
La función EXTRACT (Valor_a_extraer FROM CampoFecha) va con esta sintaxis:

Intenta con esta sintaxis que te mando, no tengo un entorno hana para probarlo, pero mi lógica dice que puede funcionar, también hay que asegurarnos para que te regrese algún valor, que tengas algún contacto en el cliente que cumpla años el día de hoy, de otra manera nunca te mostrara resultados.

SELECT T1.CardCode, T1.CardName, T0.SlpName,T1.U_NAV_Cartera, T2.Name, T2.BirthDate
FROM OSLP T0 INNER JOIN OCRD T1 ON T0.“SlpCode” = T1.“SlpCode”
INNER JOIN OCPR T2 ON T1.“CardCode” = T2.“CardCode”
WHERE DATEFROMPARTS(EXTRACT(YEAR FROM CURRENT_DATE()), EXTRACT(MONTH FROM T2.“BirthDate”), EXTRACT(DAY FROM T2.“BirthDate”)) =CURRENT_DATE()

1 me gusta

@cdeleon
Muchas gracias por tu respuesta, te comento:
Logro ejecutar el query pero no hace nada actualice una fecha a hoy con diferente año pero no me logra traer nada, esto es mejor ejecutarlo como una gestión de alarma o una ves ejecutado el query ya debería de mostrar el resultado ??

Adjunto el query completo.

SELECT T1."CardCode", T1."CardName", T1."U_NAV_Cartera", T2."Name", T2."BirthDate" FROM OSLP T0  INNER JOIN OCRD T1 ON T0."SlpCode" = T1."SlpCode" INNER JOIN OCPR T2 ON T1."CardCode" = T2."CardCode" WHERE DATEFROMPARTS(EXTRACT(YEAR FROM CURRENT_DATE()), DATEEXTRACT(MONTH FROM T2."BirthDate"), EXTRACT(DAY FROM T2."BirthDate") =CURRENT_DATE()

Muchas gracias por la ayuda.

Hola LuiskSiles , aunque un poco tarde lo veo, te muestro lo que considero te pudiese servir, saludos!!

SELECT 
	T1."CardCode", 
	T1."CardName", 
	T0."SlpName",
	T2."Name", 
	T2."BirthDate",
	DAY (T2."BirthDate") AS 'DIA CUMPLEAÑOS',
	MONTH (T2."BirthDate") AS 'MES CUMPLEAÑOS',
	YEAR (T2."BirthDate") AS 'AÑO CUMPLEAÑOS',
	DAY (GETDATE()) AS 'DIA ACTUAL',
	MONTH (GETDATE()) AS 'MES ACTUAL'
FROM OSLP T0  
	INNER JOIN OCRD T1 ON T0."SlpCode" = T1."SlpCode" 
	INNER JOIN OCPR T2 ON T1."CardCode" = T2."CardCode" 
WHERE DAY (T2."BirthDate")=DAY (GETDATE()) AND MONTH (T2."BirthDate")=MONTH (GETDATE())

Hola Amigos ya lo soluciones quedaría asi el whare:

where 
EXTRACT (MONTH from "BirthDate") = EXTRACT (MONTH from CURRENT_DATE)
and EXTRACT (DAY from "BirthDate") = EXTRACT (DAY from CURRENT_DATE)
1 me gusta

Este tema se cerró automáticamente 30 días después de la última publicación. No se permiten nuevas respuestas.