Ответ 1
SQL Server автоматически изменит значение бита на значение varchar true или false. Итак, там работает:
select * from table where booleancol = 'false'
Я не знаю, будет ли postgre делать то же самое.
Я пытаюсь сделать приложение, способное работать как на 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 и не менять их на целые типы.. хотя это вариант.
SQL Server автоматически изменит значение бита на значение varchar true или false. Итак, там работает:
select * from table where booleancol = 'false'
Я не знаю, будет ли postgre делать то же самое.
Извините, эта часть просто неверна; менее половины правды; -)
на 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 и упрощает перенос приложений из других баз данных.
Смотрите документы.
В работе мы используем 'T' и 'F' в столбцах char (1) для представления булевых в SQL Server. Я не уверен, была ли эта совместимость причиной, но это означает, что "booleancol =" F "будет работать с любым ароматом базы данных.
Если это опция, взгляните на структуру реляционного сопоставления объектов, которая может справиться с проблемой перевода SQL с одной RDBMS на другую.
Используйте ORM, сегодня нет необходимости передавать код SQL. Они существуют, поэтому решайте ту самую проблему, с которой вы столкнулись.