On Thursday, 3 August 2017, Robert Haas <robertmh...@gmail.com> wrote:
> On Thu, Aug 3, 2017 at 9:25 AM, Oliver Ford <ojf...@gmail.com > <javascript:;>> wrote: > > Adds to the to_number() function the ability to convert Roman numerals > > to a number. This feature is on the formatting.c TODO list. It is not > > currently implemented in either Oracle, MSSQL or MySQL so gives > > PostgreSQL an edge :-) > > I kind of put my head in my hands when I saw this. I'm not really > sure it's worth complicating the code for something that has so little > practical utility, but maybe other people will feel differently. I > can't deny the profound advantages associated with having a leg up on > Oracle. The formatting.c file specifies it as a TODO, so I thought implementing it would be worthwhile. As there is a to_roman conversion having it the other way is good for completeness. > > The error reporting is a little wonky, although maybe no wonkier than > anything else about these conversion routines. > > rhaas=# select to_number('q', 'rn'); > ERROR: invalid character "q" > > (hmm, no position) > > rhaas=# select to_number('dd', 'rn'); > ERROR: invalid character "D" at position 1 > > (now i get a position, but it's not really the right position; and the > problem isn't really that the character is invalid but that you don't > like me including it twice, and I said 'd' not 'D') > > rhaas=# select to_number('à', 'rn'); > ERROR: invalid character "?" > > (eh?) > > How much call is there for a format that can only represent values up to > 3999? > > The existing int_to_roman code goes up to 3999 so this patch is consistent with that. I could extend both to handle Unicode values for large numbers? > -- > Robert Haas > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company >