Я пытаюсь подать заявку, способную к работе и SQL-сервер и PostgreSQL.
Я, может казаться, не нахожу общее выражение, которое является в основном
select * from table where booleancol=false
на SQL Server я должен сделать (который очень сбивает с толку, потому что значение по умолчанию для разрядных типов должно быть TRUE или FALSE, но Вы не можете присвоить их TRUE или FALSE или тесту против него),
select * from table where booleancol=0
на PostgreSQL я должен сделать
select * from table where booleancol is false
Существует довольно много запросов в нашей программе, которая делает это, таким образом, я предпочел бы, если бы был только некоторый универсальный синтаксис, то я мог бы использовать вместо выполнения if(dbformat=="postgres")..
введите дерьмо..
Кроме того, я предпочел бы оставлять столбцы как типы булевской переменной/бит и не изменять их на целые типы.. хотя это - опция..
SQL-сервер автоматически изменит значение бита на значение переменной true или false. Так что там работает следующее:
select * from table where booleancol = 'false'
Понятия не имею, делает ли postgre то же самое.
.Если это вариант, то посмотрите на фреймворк Object Relational Mapping, который мог бы справиться с проблемой трансляции SQL с одной СУБД на другую
.Используйте ORM, сегодня нет необходимости передавать SQL-код. Они существуют, поэтому решайте ту самую проблему, с которой вы столкнулись
.В работе мы используем колонки 'T' и 'F' в char(1) для представления булеана в SQL Server. Я не уверен, была ли причина такой совместимости, но это означает, что "booleancol = 'F'" будет работать на любом вкусе базы данных.
.Извините, эта часть просто неправда; менее чем наполовину правда ;-)
на PostgreSQL я должен сделать
select * из таблицы, где booleancol ложный
На самом деле, в 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, и это делает перенос приложений из других баз данных довольно простым.
Смотрите docs.