Hi, While looking at formatting.c file, I noticed a TODO about "add support for roman number to standard number conversion" ( https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/formatting.c#L52 )
I have attached the patch that adds support for this and converts roman numerals to standard numbers (1 to 3999) while also checking if roman numerals are valid or not. I have also added a new error code: ERRCODE_INVALID_ROMAN_NUMERAL in case of invalid numerals. A few examples: postgres=# SELECT to_number('MC', 'RN'); to_number ----------- 1100 (1 row) postgres=# SELECT to_number('XIV', 'RN'); to_number ----------- 14 (1 row) postgres=# SELECT to_number('MMMCMXCIX', 'RN'); to_number ----------- 3999 (1 row) postgres=# SELECT to_number('MCCD', 'RN'); ERROR: invalid roman numeral I would appreciate your feedback on the following cases: - Is it okay for the function to handle Roman numerals in a case-insensitive way? (e.g., 'XIV', 'xiv', and 'Xiv' are all seen as 14). - How should we handle Roman numerals with leading or trailing spaces, like ' XIV' or 'MC '? Should we trim the spaces, or would it be better to throw an error in such cases? I have tested the changes and would appreciate any suggestions for improvement. I will update the docs and regressions in the next version of patch. Regards, Hunaid Sohail
v1-0001-Add-RN-rn-support-for-to_number-function.patch
Description: Binary data