Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
hopkinsc
Partner - Specialist III
Partner - Specialist III

Converting IF(isnull to SQL scripting

Hi all, 

I have the following where clause that is being used in an SQL SELECT statement..

Where TRUNC(INTERNALINFO_UPDATEDATE) = TRUNC(SYSDATE) OR TRUNC(INTERNALINFO_UPDATEDATE) = TRUNC(SYSDATE)-1

I need to change it as the INTERNALINFO_UPDATEDATE is not populated when a record is created, so i need to use an IF() statement to say if INTERNALINFO_UPDATEDATE is null then use INTERNALINFO_CREATIONDATE. 

I have done the following, but it seems like i am now mixing QV and SQL scripting which is causing it to fail. 

Where IF(ISNULL(TRUNC(INTERNALINFO_UPDATEDATE)),TRUNC(INTERNALINFO_CREATIONDATE),TRUNC(INTERNALINFO_UPDATEDATE)) = TRUNC(SYSDATE) OR IF(ISNULL(TRUNC(INTERNALINFO_UPDATEDATE)),TRUNC(INTERNALINFO_CREATIONDATE),TRUNC(INTERNALINFO_UPDATEDATE)) = TRUNC(SYSDATE)-1

Can anyone help me with getting a where clause written in SQL so i can use it within the SELECT statement please?

The purpose of this script is to only get new or updated records for the last 2 days (today and yesterday)

 

Thanks

 

5 Replies
vishsaggi
Champion III
Champion III

May be try this?
WHERE
CASE WHEN ISNULL(TRUNC(INTERNALINFO_UPDATEDATE)) THEN TRUNC(INTERNALINFO_CREATIONDATE)
ELSE
TRUNC(INTERNALINFO_UPDATEDATE) = TRUNC(SYSDATE)
End
OR
CASE WHEN ISNULL(TRUNC(INTERNALINFO_UPDATEDATE)) THEN TRUNC(INTERNALINFO_CREATIONDATE)
ELSE TRUNC(INTERNALINFO_UPDATEDATE) = TRUNC(SYSDATE)-1
End
hopkinsc
Partner - Specialist III
Partner - Specialist III
Author

Thanks for your reply, unfortunately that is failing with the error..

Capture2.PNG

My script is..

ProdTable:

SQL Select *

From DB_NAME."TABLENAME"

WHERE
CASE WHEN ISNULL(TRUNC(INTERNALINFO_UPDATEDATE)) THEN TRUNC(INTERNALINFO_CREATIONDATE)
ELSE
TRUNC(INTERNALINFO_UPDATEDATE) = TRUNC(SYSDATE)
End
OR
CASE WHEN ISNULL(TRUNC(INTERNALINFO_UPDATEDATE)) THEN TRUNC(INTERNALINFO_CREATIONDATE)
ELSE TRUNC(INTERNALINFO_UPDATEDATE) = TRUNC(SYSDATE)-1
End

;

any ideas what i am doing wrong?

 

marcus_sommer

Maybe you could apply the following approach:

TRUNC(if(len(INTERNALINFO_UPDATEDATE)>1, INTERNALINFO_UPDATEDATE, INTERNALINFO_CREATIONDATE))

- Marcus

hopkinsc
Partner - Specialist III
Partner - Specialist III
Author

Hi Marcus,

I now have the following..

TRUNC(if(len(INTERNALINFO_UPDATEDATE)>1, TRUNC(INTERNALINFO_UPDATEDATE), TRUNC(INTERNALINFO_CREATIONDATE)))=TRUNC(SYSDATE)

OR

TRUNC(if(len(INTERNALINFO_UPDATEDATE)>1, TRUNC(INTERNALINFO_UPDATEDATE), TRUNC(INTERNALINFO_CREATIONDATE)))=TRUNC(SYSDATE)-1

but i am getting an error as below..

Capture3.PNG

 

 

marcus_sommer

It seems that len() isn't valid within Oracle - just try it with length().

- Marcus