Я перепробовал целый ряд паттернов с помощью функции to_char()
, но не могу найти правильный.
to_char(price, '99999990D00')
У меня есть два тестовых номера 0 и 399326, я хочу, чтобы 0 стал «0,00», а 399326 - «399326,00».
Я узнал, что мне нужно было добавить 9 к моему шаблону, чтобы ожидать столько чисел, что является моей первой проблемой. Когда я поставляю «999999990D99», я получаю сообщение об ошибке, я предполагаю, что это слишком длинный шаблон, но это ограничивает мои цифры. Это будет проблемой. поставка '9990D99' в качестве шаблона для '399326' приводит к '####.'.
Во-вторых, я не могу найти, как получить два конечных нуля за большим числом, хотя это работает с '0'. Я пытался использовать '999999990D99', '999999990D09' и '999999990D00', но, похоже, это не сработало.
UPDATE
Решение Laurenz Albe работает с целыми числами, посмотрите на два моих примера ниже:
SELECT
to_char(0, '99999999990D00FM'),
to_char(1, '99999999990D00FM'),
to_char(11, '99999999990D00FM'),
to_char(111, '99999999990D00FM'),
to_char(1111, '99999999990D00FM'),
to_char(11111, '99999999990D00FM'),
to_char(111111, '99999999990D00FM'),
to_char(1111111, '99999999990D00FM'),
to_char(11111111, '99999999990D00FM')
WHERE 1=1
выходы:
"0.00"; "1.00"; "11.00"; "111.00"; "1111.00"; "11111.00"; "111111.00"; "1111111.00"; "11111111.00"
Как и ожидалось.
SELECT
to_char(0::real, '99999999990D00FM'),
to_char(1::real, '99999999990D00FM'),
to_char(11::real, '99999999990D00FM'),
to_char(111::real, '99999999990D00FM'),
to_char(1111::real, '99999999990D00FM'),
to_char(11111::real, '99999999990D00FM'),
to_char(111111::real, '99999999990D00FM'),
to_char(1111111::real, '99999999990D00FM'),
to_char(11111111::real, '99999999990D00FM')
WHERE 1=1
* * Тысяча двадцать-одина выходы: * * 1 022
"0.00"; "1.00"; "11.00"; "111.00"; "1111.00"; "11111.0"; "111111"; "1111111"; "11111111"
И это странно, согласно документации это должно работать и для реального типа данных. Это ошибка в Postgres?