Денежные типы

8.2. Денежные типы

Тип money хранит значения валюты с фиксированной дробной частью; см. Table 8-3. Точность дробной части определяется настройкой СУБД lc_monetary. Ввод значений допускается в нескольких разных форматах, включая целые числа и числа с плавающей точкой, также как и значения в типичном для валюты формате, такие как '$1,000.00'. Вывод значений обычно осуществляется в последней форме, но зависит от локали. Числовые значения без кавычек могут быть сконвертированы в тип money с помощью приведения числового значения к типу text, а затем к типу money, например:

SELECT 1234::text::money;

Не существует простого способа выполнить обратное преобразование независимым от локали манером именованного приведённого значение типа money в какой-либо числовой тип. Если вы знаете какой символ валюты и разделитель тысяч используются, вы можете использовать regexp_replace():

SELECT regexp_replace('52093.89'::money::text, '[$,]', '', 'g')::numeric;

Поскольку вывод значений этого типа данных зависит от локали, загрузка данных типа money из одной в базу данных может не работать, если базы данных имеют разные настройки lc_monetary. Чтобы избежать проблем, перед восстановлением дампа в новую базу данных, убедитесь, что значение настроек lc_monetary такое же или эквивалентно значению в той базе данных, где выполнялся данный дамп.

Table 8-3. Денежные типы

ИмяРазмер храненияОписаниеДиапазон
money8 байтзначения валюты-92233720368547758.08 to +92233720368547758.07

Back to top

(С) Виктор Вислобоков, 2008-2023