Обсуждение: BUG #16238: Function " to_char(timestamp, text) " doesn't work properly

Поиск
Список
Период
Сортировка

BUG #16238: Function " to_char(timestamp, text) " doesn't work properly

От
PG Bug reporting form
Дата:
The following bug has been logged on the website:

Bug reference:      16238
Logged by:          Nick Memos
Email address:      memnik@hotmail.com
PostgreSQL version: 10.7
Operating system:   Windows 10
Description:

Hello,
I have created a table with a json column. Where in this json i have some
details for each day of the week. It is something like this '{"Monday":
13,"Tuesday": 13,"Wednesday": 13, "Thursday ": 12, "Friday": 13,"Saturday":
13,"Sunday": 13}'::json.
So, when i try to get the information for each day by this way:  '{"Monday":
13,"Tuesday": 13,"Wednesday": 13, "Thursday ": 12, "Friday": 13,"Saturday":
13,"Sunday": 13}'::json->>to_char(current_timestamp,'Day') , i don't get the
results for all days. As i noticed the problem is that the function "
to_char(timestamp, text) "  doesn't work properly. For example this query "
select to_char('2020-01-29'::date,'Day') " give me this result "Wednesday",
but this query " select to_char('2020-01-31'::date,'Day') "  give me this
result "Friday   ".
So, i guess it is not right to have days with many spaces as a result and
some days without any space.
Now i will user trim() function but it is better to fix that if it is
possible.
Thanks!


Re: BUG #16238: Function " to_char(timestamp, text) " doesn't workproperly

От
hubert depesz lubaczewski
Дата:
On Thu, Jan 30, 2020 at 11:49:45AM +0000, PG Bug reporting form wrote:
> For example this query "
> select to_char('2020-01-29'::date,'Day') " give me this result "Wednesday",
> but this query " select to_char('2020-01-31'::date,'Day') "  give me this
> result "Friday   ".
> So, i guess it is not right to have days with many spaces as a result and
> some days without any space.

First of all - it's not a bug - function works exactly as documented:
https://www.postgresql.org/docs/current/functions-formatting.html#FUNCTIONS-FORMATTING-DATETIME-TABLE
says:

"Day" -> full capitalized day name (blank-padded to 9 chars).

If you don't want the padding, use FM modifier, like:

select to_char('2020-01-31'::date,'FMDay');

Best regards,

depesz




Re: BUG #16238: Function " to_char(timestamp, text) " doesn't work properly

От
Tom Lane
Дата:
PG Bug reporting form <noreply@postgresql.org> writes:
> As i noticed the problem is that the function "
> to_char(timestamp, text) "  doesn't work properly. For example this query "
> select to_char('2020-01-29'::date,'Day') " give me this result "Wednesday",
> but this query " select to_char('2020-01-31'::date,'Day') "  give me this
> result "Friday   ".
> So, i guess it is not right to have days with many spaces as a result and
> some days without any space.

No, that's behaving as expected and documented.  If you don't want
fixed-width output, use the FM prefix:

=# select to_char('2020-01-31'::date,'-Day-');
   to_char   
-------------
 -Friday   -
(1 row)

=# select to_char('2020-01-31'::date,'-FMDay-');
 to_char  
----------
 -Friday-
(1 row)

            regards, tom lane



Re: BUG #16238: Function " to_char(timestamp, text) " doesn't workproperly

От
Nick Memos
Дата:
Ok thanks Tom!

Αποκτήστε το Outlook για Android


From: Tom Lane <tgl@sss.pgh.pa.us>
Sent: Thursday, January 30, 2020 6:27:02 PM
To: memnik@hotmail.com <memnik@hotmail.com>
Cc: pgsql-bugs@lists.postgresql.org <pgsql-bugs@lists.postgresql.org>
Subject: Re: BUG #16238: Function " to_char(timestamp, text) " doesn't work properly
 
PG Bug reporting form <noreply@postgresql.org> writes:
> As i noticed the problem is that the function "
> to_char(timestamp, text) "  doesn't work properly. For example this query "
> select to_char('2020-01-29'::date,'Day') " give me this result "Wednesday",
> but this query " select to_char('2020-01-31'::date,'Day') "  give me this
> result "Friday   ".
> So, i guess it is not right to have days with many spaces as a result and
> some days without any space.

No, that's behaving as expected and documented.  If you don't want
fixed-width output, use the FM prefix:

=# select to_char('2020-01-31'::date,'-Day-');
   to_char  
-------------
 -Friday   -
(1 row)

=# select to_char('2020-01-31'::date,'-FMDay-');
 to_char 
----------
 -Friday-
(1 row)

                        regards, tom lane