2009-12-22 8 views
15

Sto tentando di creare un'applicazione in grado di funzionare sia su Sql Server che su PostgreSQL.In qualche modo fare `where booleanvalue = false` su Sql Server e PostgreSQL?

io non riesco a trovare un'espressione comune che è fondamentalmente

select * from table where booleancol=false 

su SQL Server devo fare (che è molto confusa perché il valore di default per i tipi di bit deve essere vero o falso, ma è possibile 't assegnarli a vero o falso o di prova contro di essa)

select * from table where booleancol=0 

su PostgreSQL che devo fare

select * from table where booleancol is false 

Ci sono un sacco di domande nel nostro programma che fa questo, quindi preferirei se ci fosse solo una sintassi universale potrei usare invece di fare if(dbformat=="postgres").. tipo di merda ..

Inoltre, preferirei lasciare le colonne come tipi booleani/bit e non le cambiano in tipi interi .. anche se questa è un'opzione ..

risposta

17

SQL Server cambierà automaticamente il valore del bit nel valore varchar di vero o falso. Quindi il seguente funziona:

select * from table where booleancol = 'false' 

Non ho idea se postgre faccia la stessa cosa.

-7

Utilizzare un ORM, non è necessario oggi per passare il codice SQL. Esistono quindi risolvono il problema in cui vi siete imbattuti.

+0

perché questo è stato downvoted? – docesam

+2

È stato downvoted perché (a) non riesce completamente a rispondere alla domanda, e (b) finge di sapere tutto sull'applicazione OPs. – henrebotha

0

Se è un'opzione, dare un'occhiata a un framework di mappatura relazionale degli oggetti, che potrebbe gestire il problema della traduzione di SQL da un RDBMS a un altro.

1

Al lavoro, vengono utilizzate le colonne "T" e "F" nelle colonne char (1) per rappresentare i valori booleani in SQL Server. Non sono sicuro che questo tipo di compatibilità fosse il motivo, ma significa che "booleancol = 'F'" funzionerebbe su entrambi i tipi di database.

29

Siamo spiacenti, questa parte non è semplicemente vera; meno della metà-vero ;-)

su PostgreSQL devo fare

select * from table where booleancol is false

In realtà, tutte le sintassi seguenti sono validi in PostgreSQL:

select * from table where not booleancol 
select * from table where booleancol = 'f' 
select * from table where booleancol = 'false' 
select * from table where booleancol = 'n' 
select * from table where booleancol is false 
select * from table where booleancol is not true 
select * from table where booleancol = false 
select * from table where booleancol <> true 
select * from table where booleancol != true 
select * from table where booleancol <> 'TRUE' 

Questo è esempio di postgres sintassi flessibile, e rende abbastanza semplice il porting di applicazioni da altri database.

Vedere the docs.

+0

sì, ma fuori dalla tua lista, solo 2 sintassi sono supportate anche da Sql Server e mi è capitato di usare ciò che era valido solo in SQL Server: 'seleziona * dalla tabella dove booleancol = 0' – Earlz

+1

Tale elenco non è esaustivo, ma il collegamento dei documenti è: La sintassi che stai usando (0/1 per false/true) è anche PostgreSQL valido. –