Некоторым образом сделать 'где booleanvalue=false' и на SQL-сервере и на PostgreSQL?

Я пытаюсь подать заявку, способную к работе и 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").. введите дерьмо..

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

17
задан Earlz 22 December 2009 в 20:31
поделиться

5 ответов

SQL-сервер автоматически изменит значение бита на значение переменной true или false. Так что там работает следующее:

select * from table where booleancol = 'false'

Понятия не имею, делает ли postgre то же самое.

.
17
ответ дан 30 November 2019 в 11:27
поделиться

Если это вариант, то посмотрите на фреймворк Object Relational Mapping, который мог бы справиться с проблемой трансляции SQL с одной СУБД на другую

.
0
ответ дан 30 November 2019 в 11:27
поделиться

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

.
-8
ответ дан 30 November 2019 в 11:27
поделиться

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

.
1
ответ дан 30 November 2019 в 11:27
поделиться

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

на 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.

30
ответ дан 30 November 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: