2015-12-23 9 views
9

In PostgreSQL (versione 9.4, pgAdmin3), quando si seleziona su una tabella con colonna booleana, l'output dei dati mostra "t" o "f". Vorrei convertire/convertire booleani come VERO o FALSO senza scrivere istruzioni CASE o fare JOIN ecc.Restituisce valore booleano come TRUE o FALSE in Select (PostgreSQL/pgAdmin)

BTW, secondo PostgreSQL proprio documentation questo comportamento non è lo standard SQL.

Le parole chiave TRUE e FALSE sono l'utilizzo preferito (conforme a SQL).

PS: questo accade solo quando si utilizza l'editor SQL in pgAdmin. Utilizzare il browser degli oggetti pgAdmin, eseguire il drill down sulla stessa tabella, fare clic con il pulsante destro del mouse, visualizzare i dati, visualizzare le 100 righe principali, la stessa colonna booleana viene visualizzata come VERO o FALSO, come previsto/standard.

+1

Se visualizzato come "t"/"f" o "TRUE"/"FALSE" è semplicemente un problema di visualizzazione. Il valore booleano restituisce il valore di TRUE o FALSE (nota, senza virgolette). Quanto viene rappresentato sul display dipende da quel software. Suggerisco caldamente di provare a restituire un valore stringa per aggirare un problema di visualizzazione qui. –

+0

Corretto - solo un problema estetico. Ho aggiunto pgAdmin al titolo della mia domanda per chiarire. Anche il display è specificamente in pgAdmin SQL Editor. Quindi immagino sia solo una richiesta di miglioramento nella prossima versione di pgAdmin - essere coerente con la propria documentazione e lo standard SQL ;-) –

risposta

11

Se tutto ciò che si desidera mostrare è il valore letterale TRUE o FALSE, è possibile utilizzare le dichiarazioni del caso come si era proposto. Poichè PostgreSQL tratta TRUE, true, yes, on, , t e 1 come vero, controllerò come vorrei che l'output fosse simile.

clausola WHERE può essere scritta come:

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

(la mia raccomandazione è la stessa di PostgreSQL - usare vero)

Nella scelta, anche se ci possono essere esitazioni a utilizzare le istruzioni case, I' d consiglio comunque di farlo per avere il controllo sulla stringa letterale di output.

Vostri criteri sarebbe simile a questa:

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

SQLFiddle esempio: 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 | 
+0

Non sono un guru SQL. Possiamo documentare un'istruzione CASE per completare la risposta proprio come hai mostrato con SELECT? Ho fatto –

+0

Oh sì, ci puoi scommettere. Ho aggiunto un esempio – zedfoxus

+0

select *, CASE WHEN attivo È TRUE THEN 'TRUE' ELSE 'FALSE' END da tablename (la virgola dopo * è importante) –

6

Un semplice cast text farà il lavoro (a meno che non avete bisogno di alto caso di ortografia):

SELECT true::text AS t, false::text AS f; 

t | f 
------+------- 
true | false 

Altrimenti, la rappresentazione del testo dipende dalla libreria e dal client yo usi per connetterti JDBC per esempio rende boolean valori come 'vero'/'falso' in ogni caso:

SQL Fiddle.

amerete questo cambiamento di Postgres 9.5 (attualmente release candidate):

  • Utilizzare il comportamento cast assegnazione per le conversioni dei tipi di dati in assegnazioni PL/pgSQL , anziché convertire in e da testo (Tom Lane)

    Questo cambiamento provoca conversioni di valori booleani in stringhe di produrre true o false, non t o f.Altre conversioni di tipo possono avere successo in più casi rispetto a prima; ad esempio, l'assegnazione di un valore numerico 3.9 a una variabile intera assegnerà ora 4 anziché fallire. Se non è stato definito alcun cast di livello di assegnazione per i tipi di origine e destinazione specifici, PL/pgSQL ricadrà sul vecchio comportamento di conversione I/O.

grassetto corsivo mio.

Problemi correlati