JavaBlog.fr / Java.lu DEVELOPMENT,Documentum,DQL DCTM Documentum : BUG in DQL Date Functions When Together Use Of DATEFLOOR, DATEDIFF, DATETOSTRING and DATEADD

Documentum : BUG in DQL Date Functions When Together Use Of DATEFLOOR, DATEDIFF, DATETOSTRING and DATEADD

Hello,

Just a post concerning the BUG of use of DATEFLOOR, DATEDIFF, DATETOSTRING and DATEADD together.

To illustrate this problem, for example, we would like to list the documents (r_object_id) modified during the last year:

1#### Docs modified during the LAST YEAR ; ex: >= 01/01/2016 00:00:00 et < 01/01/2017 00:00:00
2# error
3SELECT r_object_id
4FROM dm_document
5WHERE r_modify_date >= DATEFLOOR(year,DATEADD(year, -1, DATE(TODAY)))
6AND r_modify_date < DATEFLOOR(year,DATE(TODAY));

==> Error occured during query execution :[DM_QUERY_E_SYNTAX]error: “A Parser Error (syntax error) has occurred in the vicinity of: SELECT r_object_id FROM dm_document WHERE r_modify_date >= “
 

1# same error
2SELECT r_object_id, r_modify_date, DATEFLOOR(year,DATE(TODAY)) as dte0, DATEFLOOR(year,DATE(NOW)) as dte1, DATEADD(year, -1, DATE(TODAY)) as dte2, DATEFLOOR(year,DATEADD(year, -1, DATE(TODAY))) as dte3
3FROM dm_document
4WHERE r_modify_date < DATEFLOOR(year,DATE(TODAY))
5;

==> Error occured during query execution :[DM_QUERY_E_SYNTAX]error: “A Parser Error (syntax error) has occurred in the vicinity of: SELECT r_object_id, r_modify_date, DATEFLOOR(year,DATE(TODAY)) “
 

1# NO any error
2SELECT r_object_id, r_modify_date, DATEFLOOR(year,DATE(TODAY)) as dte0, DATEFLOOR(year,DATE(NOW)) as dte1, DATEADD(year, -1, DATE(TODAY)) as dte2
3FROM dm_document
4WHERE r_modify_date < DATEFLOOR(year,DATE(TODAY))
5;

==> NO any error
 

==> The problem that’s because DQL does not allow to imbricate these functions DATEFLOOR, DATEADD, DATEDIFF and DATETOSTRING.

1# OK
2select count(object_name) from dm_document where DATETOSTRING("r_creation_date",'mm/yyyy') = DATETOSTRING(DATE(TODAY),'mm/yyyy');
3# NOK : ERROR
4select count(object_name) from dm_document where DATETOSTRING("r_creation_date",'mm/yyyy') = DATETOSTRING(DATEADD(year, -1, DATE(TODAY)),'mm/yyyy');

 

1# OK
2SELECT * from dm_document WHERE DATEDIFF(day, r_modify_date,DATE(TODAY))<7;
3# NOK : ERROR
4SELECT * from dm_document WHERE DATEDIFF(day, r_modify_date,DATEADD(month, -1, DATE(TODAY)))<30;

 
 

The alternative DQL query to return all documents modified in last year :

1SELECT DATE(TODAY) as dte_today, DATE(NOW) as dte_now, DATETOSTRING(DATE(TODAY),'yyyy') as current_year, DATETOSTRING(DATE(TODAY),'yyyy')-1  as last_year from dm_docbase_config;
2dte_today = 14/02/2017 00:00:00
3dte_today = 14/02/2017 11:23:53
4current_year = 2017
5last_year = 2016

 

1SELECT count(r_object_id)
2FROM dm_document a
3WHERE
4DATETOSTRING(a.r_modify_date,'yyyy') = (DATETOSTRING(DATE(TODAY),'yyyy')-1)
5;

 

That’s all!!!

Huseyin OZEVEREN

Leave a Reply

Your email address will not be published.

Time limit is exhausted. Please reload CAPTCHA.

Related Post