В некотором смысле сделать `where booleanvalue = false` на обоих серверах Sql и PostgreSQL?

Я пытаюсь сделать приложение, способное работать как на Sql Server, так и на PostgreSQL.

Я не могу найти общее выражение, которое в основном

 select * from table where booleancol=false

на SQL Server, который я должен сделать (что очень сбивает с толку, потому что значение по умолчанию для типов бит должно быть истинным или ложным, но вы не можете назначить им true или false или test против него)

select * from table where booleancol=0

на PostgreSQL я должен сделать

select * from table where booleancol is false

В нашей программе есть довольно много запросов, поэтому я бы предпочел, если бы я использовал только один универсальный синтаксис вместо того, чтобы делать тэги типа if(dbformat=="postgres")...

Кроме того, я бы предпочел оставить столбцы как типы boolean/bit и не менять их на целые типы.. хотя это вариант.

Ответы

Ответ 1

SQL Server автоматически изменит значение бита на значение varchar true или false. Итак, там работает:

select * from table where booleancol = 'false'

Я не знаю, будет ли postgre делать то же самое.

Ответ 2

Извините, эта часть просто неверна; менее половины правды; -)

на PostgreSQL я должен сделать

select * from table where booleancol is false

Фактически, все следующие синтаксисы действительны в 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'

Этот пример гибкого синтаксиса postgres и упрощает перенос приложений из других баз данных.

Смотрите документы.

Ответ 3

В работе мы используем 'T' и 'F' в столбцах char (1) для представления булевых в SQL Server. Я не уверен, была ли эта совместимость причиной, но это означает, что "booleancol =" F "будет работать с любым ароматом базы данных.

Ответ 4

Если это опция, взгляните на структуру реляционного сопоставления объектов, которая может справиться с проблемой перевода SQL с одной RDBMS на другую.

Ответ 5

Используйте ORM, сегодня нет необходимости передавать код SQL. Они существуют, поэтому решайте ту самую проблему, с которой вы столкнулись.