Datediff - sobre su uso

Buenos días,

Favor quien me pueda orientar con el uso de la funcion DATEDIFF.
Al intentar ocupar la función en la siguiente consulta,

SELECT T0.“DocNum”, T0.“CardName”, T0.“DocTotal” FROM OINV T0 WHERE DATEDIFF (T0.“DocDueDate”, CURRENT_DATE) >1

me indica el siguiente error,

1). [SAP AG][LIBODBCHDB32 DLL][HDBODBC32] General error;328 invalid name of function or procedure: DATEDIFF: line 1 col 69 ‘’ (SWEI) (at pos 68)

Ocupo la version 9.2. de SAP B1

Saludos,

Te falta un argumento antes de las fechas, donde indiques qué unidad de tiempo deseas, si días, meses, años, etc. Mira este link:

h_tps://www.w3schools.com/sql/func_sqlserver_datediff.asp

Bueno, por lo que veo trabajas con SAP HANA, checa lo siguiente:

You could do it the following way.

SELECT DAYS_BETWEEN (TO_DATE (‘2009-12-05’, ‘YYYY-MM-DD’), TO_DATE(‘2010-01-05’, ‘YYYY-MM-DD’)) “days between” FROM DUMMY;

days between

31

Reference information on SAP HANA is available at SAP HANA Platform – SAP Help Portal Page

Then use the links for SAP HANA SQL Reference to either download the pdf or view online.

There you will find different functions available.

Post completo:

h_tps://archive.sap.com/discussions/thread/3656616

Saludos. :wink:

4 Me gusta

Compañero, mil gracias por tu contribuciones y una disculpa pero tuve que editar tu post, aquí la referencia:

2 Me gusta

@JonathanAzael he intentado colocando el argumento day, dy, y, DAY, sin embargo continua el mismo error

Le versión de sap influye?

1 me gusta

SI @Gera_Mendez trabajo con sap hana. Voy a intentar con esta función DAYS_BETWEEN parace ideal. Luego te comento,
Saludos.

1 me gusta

Gracias @Gera_Mendez, aún no me acostumbro a lo de los links, saludos.

@FranciscoAn, según lo que he visto, influye la versión del manejador de BD. En mi caso trabajo con SQL Server, no se con certeza como se maneja esta función con SAP HANA, pero viendo en la ayuda de SAP, no aparece esa función listada de primera instancia, sino la que te menciona @Gera_Mendez. Te dejo el link aquí h_tps://help.sap.com/viewer/4fe29514fd584807ac9f2a04f6754767/2.0.02/en-US/20e16ca5751910148da4fc7ec69bae03.html.

1 me gusta

En efecto, funciono impecablemente la sugerencia de @Gera_Mendez
Al final ocupe la funcion DAYS_BETWEEN y ningun problema.
Muchas gracias.
Saludos.

2 Me gusta

Muchas gracias @Gera_Mendez solucionó mi problema,

dejo parte de la consulta que estoy generando. A quien le pueda servir.

SELECT TOP 15
T0."CardName" AS "Clientes",

(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND T1."DocDueDate" >= CURRENT_DATE AND T1."CANCELED" = 'N') 
AS "No Vencido",
(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND T1."DocDueDate" >CURRENT_DATE AND DAYS_BETWEEN ( CURRENT_DATE, T1."DocDueDate") <= 30 AND T1."CANCELED" = 'N') AS " 0      -      30 ",
(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND DAYS_BETWEEN (CURRENT_DATE, T1."DocDueDate") >=31 AND DAYS_BETWEEN ( CURRENT_DATE, T1."DocDueDate") <= 60 AND T1."CANCELED" = 'N') AS " 31      -      60 ",
(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND DAYS_BETWEEN (CURRENT_DATE, T1."DocDueDate") >=61 AND DAYS_BETWEEN ( CURRENT_DATE, T1."DocDueDate") <= 90 AND T1."CANCELED" = 'N') AS " 61      -      90 ",
(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND DAYS_BETWEEN (CURRENT_DATE, T1."DocDueDate") >=91 AND DAYS_BETWEEN ( CURRENT_DATE, T1."DocDueDate") <= 180 AND T1."CANCELED" = 'N') AS " 91      -      180 ",
(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND DAYS_BETWEEN (CURRENT_DATE, T1."DocDueDate") >=181 AND DAYS_BETWEEN ( CURRENT_DATE, T1."DocDueDate") <= 360  AND T1."CANCELED" = 'N') AS " 181      -      360 ",
(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND DAYS_BETWEEN (CURRENT_DATE, T1."DocDueDate") >=361 AND T1."CANCELED" = 'N') AS "       360+       ",
(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND T1."DocDueDate" < CURRENT_DATE AND T1."CANCELED" = 'N')
 AS "Vencido",
(SELECT SUM (T1."DocTotal") FROM OINV T1 WHERE T1."CardName" = T0."CardName" AND T1."PaidSys" = 0 AND T1."CANCELED" = 'N') AS "TOTAL"

FROM OINV T0 WHERE T0."PaidSys" = 0 AND T0."CardName" NOT Like '%%Ez%%' 

GROUP BY T0."CardName"

ORDER BY SUM(T0."DocTotal") DESC

Saludos.

3 Me gusta

Este tema se cerró automáticamente 7 días después del último post. No se permiten nuevas respuestas.