Как в PGAdmin III при выгрузке в CSV сделать правильное отображение дробных чисел?

Те, кто использует PostgreSQL в качестве сервера баз данных, очень часто пользуются такой программой как PGAdmin III — это средство администрирования данной СУБД. И, наверное, сталкивались с такой проблемой, как выгрузка дробных чисел в CSV в неправильном формате. Так как при выгрузке в PostgreSQL в качестве разделителя дробной части используется точка. И тем самым, если выгрузить данные в формат CSV и открыть, например, Excel, то у Вас некоторые числа будут иметь формат даты, за счет того, что Excel использует в качестве разделителя дробной части запятую, и Вам придется вручную все это дело проверять и исправлять, что не очень удобно.

Если Вы столкнулись с такой проблемой, я предлагаю один очень простой вариант, который поможет Вам выгрузить корректно дробные числа в формат CSV.

Примечание! Данный способ предполагает знание основ SQL, так как реализация будет осуществлена с помощью функции на plpgsql, которую мы сейчас напишем.

Как в PGAdmin III выгрузить данные в CSV?

Если Вы вообще не знаете, как осуществляется выгрузка в формат CSV, то она делается очень просто, пишите запрос в окне query, выполняете его, затем в меню выбираете «Файл -> Экспорт», далее появится следующее окно, заполните в соответствие с примером и жмите ОК.

Скриншот 1

Перейдем непосредственно к выгрузке дробных чисел.

Правильное отображение дробных чисел при выгрузке в CSV

Данный способ заключается в том, что мы просто заменяем точку на запятую используя встроенную функцию replace. Можно, кстати, сразу использовать ее без написания дополнительной функции, но как мне кажется, каждый раз прописывать весь синтаксис данной функции очень нудно, например:

   
   SELECT col1, replace(col1::text, '.', ',') 
   FROM test.table

где col1 – это столбец, содержащий дробное число.

И результат будет, например, таким:

col1  replace

10.5  10,5

Для удобства я предлагаю написать функцию, и в качестве параметра просто передавать число, а результат возвращать в виде текста, например:

   
   --Название функции, test - это схема в БД
   CREATE OR REPLACE FUNCTION test.f_decimal(numeric)
   --Тип возвращаемого результата, т.е. текст
     RETURNS text AS
   $BODY$
   DECLARE
        --Объявляем переменные
        _var alias for $1;
        _rez text;
   BEGIN
        --Просто заменяем точку на запятую
        SELECT into _rez replace(_var::text, '.', ',');
        --Возвращаем результат
        return _rez;
   END;
   $BODY$
    LANGUAGE 'plpgsql' VOLATILE
    COST 100;
   ALTER FUNCTION test.f_decimal(numeric) OWNER TO "postgres";

Запрос в данном случае будет выглядеть следующим образом:

 
   SELECT col1, test.f_decimal(col1) 
   FROM test.table

И теперь те поля, в которых есть такие числа, необходимо пропускать через эту функцию и все, выгрузка будет осуществляться корректно.

Вот такой простенький пример, который может пригодиться Вам. Пока!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.