If you are unable to create a new account, please email support@bspsoftware.com

 

News:

MetaManager - Administrative Tools for IBM Cognos
Pricing starting at $2,100
Download Now    Learn More

Main Menu

Date format in CSV

Started by Good Friend, Yesterday at 11:04:29 AM

Previous topic - Next topic

Good Friend

Date format in CSV is coming as MM/DD/YYYY. I'm trying for the format YYYY-MM-DD. Tried different ways and its not working for me. Any inputs or workaround will be appreciated. Thanks.

sjohnson

When I had a similar problem, I used something like this to force the date into the correct format

_year(cast([Date], date))
+ '-' +
_month(cast([Date], date))
+ '-' +
_day(cast([Date], date))

Not the most elegant solution, but it worked.

Good Friend

Thanks Johnson for your response. Tried your code and it isnt working as expected. I'm using current_Date as date and backend is SQL server and the result is coming as 2041.

sjohnson

Good Friend,
Sorry the code didn't work for you. 2041 is the sum of the year, month, and day. Any chance your code looks something like this?
_year(current_date)
+
_month(current_date)
+
_day(current_date)

If the date separators ('-') aren't included in the Data item expression then the result is evaluated mathematically since the '+' operator is being used for concatenation and all the parts are numeric.

If you replace '+' with '||' in the above code
_year(current_date)
||
_month(current_date)
||
_day(current_date)
then you should get '2026115'.

If you include the date separators in the original code above
_year(current_date)
+ '-' +
_month(current_date)
+ '-' +
_day(current_date)
then you should get '2026-1-15'.

Combining both suggested changes yields
_year(current_date)
|| '-' ||
_month(current_date)
|| '-' ||
_day(current_date)
which will also return '2026-1-15'.

Having said all that, I just noticed that the code I suggested will only return a single digit for month for any month before October and you requested MM. I have another, inelegant, solution for that. The code looks at the month value and concatenates a '0' if it is less than 10.
With date separators:
_year(current_date)
|| '-' ||
if (_month(current_date) < 10)
then ('0')
else ('')
||
_month(current_date)
|| '-' ||
_day(current_date)
returns 2026-01-15

Without date separators:
_year(current_date)
||
if (_month(current_date) < 10)
then (0)
else (null)
||
_month(current_date)
||
_day(current_date)
returns 20260115

To summarize
  • Both || and + can be used for concatenation. Using the + operator to concatenate can result in unexpected addition when all values are numeric.
  • Data formatting for csv/Excel Data can be a bit of a pain in my experience.


Good Friend

Thanks again for spending time on this. Tried your logic but somehow it is not working as expected for CSV. I got a workaround for CSV with the below logic but when you export it to CSV you will have something like =" 2026-01-15 " and got to format it little bit to show it as 2026-01-15. Below is the Code

Code:
'=" ' + cast(extract(year, current_date), varchar(4)) + '-' +
(if (extract(month, current_date) < 10) then ('0') else ('')) + cast(extract(month, current_date), varchar(2)) + '-' +
(if (extract(day, current_date) < 10) then ('0') else ('')) + cast(extract(day, current_date), varchar(2)) + ' "'