Возвращает логическое значение как TRUE или FALSE в Select (PostgreSQL / pgAdmin)

В PostgreSQL (версия 9.4, pgAdmin3) при выполнении выбора в таблице с булевым столбцом вывод данных показывает «t» или «f». Я бы хотел, чтобы лить / конвертировать логические значения как TRUE или FALSE без написания инструкций CASE или выполнения JOINS и т. Д.

BTW, согласно документации PostgreSQL, это поведение не является стандартом SQL.

Ключевые слова TRUE и FALSE являются предпочтительным (SQL-совместимым) использованием.

PS: Это происходит только при использовании редактора SQL в pgAdmin. Используйте браузер объектов pgAdmin, разверните его в ту же таблицу, щелкните правой кнопкой мыши, просмотрите данные, просмотрите Top 100 строк, тот же логический столбец отображается как TRUE или FALSE, как ожидалось / стандартно.

Если все, что вы хотите показать, это буквальное значение TRUE или FALSE , вы можете использовать утверждения case, как вы предлагали. Поскольку PostgreSQL рассматривает TRUE , true , yes , on , y , t и 1 как true, я бы контролировал, как бы хотелось, чтобы результат выглядел.

Если предложение может быть написано так:

 select * from tablename where active --or-- select * from tablename where active = true 

(Моя рекомендация такая же, как PostgreSQL – используйте true)

При выборе, хотя может быть и нерешительность использовать аргументы case, я бы по-прежнему рекомендовал сделать это, чтобы контролировать ваш литерал строки вывода.

Ваш запрос будет выглядеть так:

 select case active = TRUE then 'TRUE' else 'FALSE' end as active_status, ...other columns... from tablename where active = TRUE; 

Пример SQLFiddle: http://sqlfiddle.com/#!15/4764d/1

 create table test (id int, fullname varchar(100), active boolean); insert into test values (1, 'test1', FALSE), (2, 'test2', TRUE), (3, 'test3', TRUE); select id, fullname, case when active = TRUE then 'TRUE' else 'FALSE' end as active_status from test; | id | fullname | active_status | |----|----------|---------------| | 1 | test1 | FALSE | | 2 | test2 | TRUE | | 3 | test3 | TRUE | 

Простой text в text выполнит эту работу (если вам не нужна text на верхнем регистре):

 SELECT true::text AS t, false::text AS f; t | f ------+------- true | false 

Else, текстовое представление зависит от библиотеки и клиента, который вы используете для подключения. Например, JDBC визуализирует boolean значения как 'true' / 'false':

SQL Fiddle.

Вам понравится это изменение в Postgres 9.5 (в настоящее время релиз-кандидат):

  • Используйте поведение приведения заданий для преобразований типов данных в назначениях PL / pgSQL, а не для преобразования в текст и из текста (Tom Lane)

    Это изменение вызывает преобразование булевых строк в строки для создания true или false , а не t или f . Конверсии другого типа могут преуспеть в большем количестве случаев, чем раньше; например, присвоение числового значения 3.9 целочисленной переменной теперь присваивает 4 а не неудачу. Если для конкретных типов источника и назначения не задан ни один класс назначения, PL / pgSQL вернется к своему старому поведению ввода-вывода.

Смелый акцент мой.