Re: to_date() and to_timestamp() with negative years

Поиск
Список
Период
Сортировка
От Adrian Klaver
Тема Re: to_date() and to_timestamp() with negative years
Дата
Msg-id e3f68515-6925-da9a-004c-cd206e730aeb@aklaver.com
обсуждение исходный текст
Ответ на Re: to_date() and to_timestamp() with negative years  (Bryn Llewellyn <bryn@yugabyte.com>)
Ответы Re: to_date() and to_timestamp() with negative years
Список pgsql-general
On 11/3/21 15:56, Bryn Llewellyn wrote:
>> tgl@sss.pgh.pa.us wrote:
>>
>> Adrian Klaver <adrian.klaver@aklaver.com> writes:
>>> Haven't had time to work through what the above is actually doing.
>>
>> I think the first two are explained by 489c9c340:
>>
>>     Also, arrange for the combination of a negative year and an
>>     explicit "BC" marker to cancel out and produce AD.  This is how
>>     the negative-century case works, so it seems sane to do likewise.
>>
>> The last two look like a parsing issue: with no field separator (nope, the space doesn't count), the code is taking
thedash as a field separator.
 
> 
> Thanks, Adrian, for trying those tests. So if PG is aiming for one consistent story for years that are less than one,
inall three APIs (to_date() and its cousins, make_timestamp[tz](), and text-to-date-time typecasts), then work still
remains.
> 
> The parsing problem seems to be a separable annoyance. I assume that Tom’s "nope, the space doesn't count” is a
narrowcomment on this corner of the implementation. It definitely counts here:
 
> 
> select to_date('12345 01 01', 'YYYY MM DD');
> 
> And you have to have some kind of separator between the years substring and the adjacent one(s) even to succeed with
yearsthat have more than four digits. Another usage note stresses that while this is OK:
 
> 
> select to_date('12340101', 'YYYYMMDD');
> 
> this isn't:
> 
> select to_date('123450101', 'YYYYMMDD');

It does with a tweak:

select to_date('12345 0101', 'FMYYYYMMDD');
    to_date
-------------
  12345-01-01


> 
> and nor is anything else that you might dream up that does not have a separator as mentioned above.
> 
> Tom asked about Oracle Database. I have a still-working Version 18.0 in a VM on my laptop. The query can't be so
tersethere because there's no implicit typecast from date to text. And there's the famous annoyance of "dual".
 

If you go here:

https://www.postgresql.org/docs/current/functions-formatting.html

and search on Oracle you will see that there are other exceptions. Like 
most things there is not complete agreement on how closely to follow 
someone else's code.

> 
> I tried this first:
> 
> select to_char(to_date('1234/01/01', 'YYYY/MM/DD'), 'YYYY/MM/DD') from dual;
> 
> It gets the same output back as the input you gave. So far so good. Then I changed the input to '-1234/01/01'. It
causedthis error:
 
> 
> ORA-01841: (full) year must be between -4713 and +9999, and not be 0
> 
> So it seems that Oracle Database has its own problems. But at least the wording "must… not be 0" is clear—and not
whatPG wants to support.
 
> 


-- 
Adrian Klaver
adrian.klaver@aklaver.com



В списке pgsql-general по дате отправления:

Предыдущее
От: Bryn Llewellyn
Дата:
Сообщение: Re: to_date() and to_timestamp() with negative years
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: to_date() and to_timestamp() with negative years