Типы данных
Логические значения
Логическим значением называется простая структура данных, представляющая одну из двух величин: true или false. В PostgreSQL поддерживается тип данных boo! ean, определенный в стандарте SQL99, с нестандартным синонимом bool.
Логическим переменным, как и другим типам данных, может присваиваться значение NULL, Логическая переменная, равная NULL, никогда не интерпретируется как true или false; она интерпретируется только как NULL. Если вы хотите проверить, равна ли логическая переменная псевдозначению NULL, не пытайтесь сравнивать ее с false, это бессмысленно. Для этой цели следует использовать конструкцию IS NULL. Способность логической переменной принимать значения true, false и NULL (и правила, в соответствии с которыми NULL считается отличным от этих двух величин) называется тройственной логикой.
В табл. 3.11 приведены допустимые обозначения логических констант, правильно опознаваемые PostgreSQL. Выбор обозначений является делом вкуса. Все разновидности значения true, как и все разновидности значения fal se, интерпретируются сервером одинаково.
Таблица 3.11. Логические константы.
True | False |
true | false |
't' | Т |
'true' | 'false' |
'У' | 'n' |
'yes' | 'no' |
'1' '0' |
Внимание
Помните, что все константы, перечисленные в табл. 3.11 (за исключением true и false), должны заключаться в апострофы. В противном случае сервер выдает сообщение об ошибке.
В листинге 3.17 приведен пример создания таблицы daIly_i inventory с информацией о наличии книг в магазине. В этой таблице код ISBN ассоциируется с логическим признаком. После создания таблица заполняется серией команд INSERT, в которых передается строковая константа (код ISBN) и логические константы в разных форматах.
Листинг 3.17. Простая таблица с логическими значениями.
booktown=# CREATE TABLE daily_inventory (isbn text .in_stock boolean); CREATE booktown=# INSERT INTO dailyjnventory VALUES ('0385121679', true); INSERT 3390926 1 booktown=# INSERT INTO dailyjnventory VALUES ('039480001X'. 't'); INSERT 3390927 1 booktown=# INSERT INTO dailyjnventory VALUES ('044100590X'. 'true'); INSERT 3390928 1 booktown=# INSERT INTO dailyjnventory VALUES С0451198492', false); INSERT 3390929 1 booktown=# INSERT INTO dailyjnventory VALUES С0394900014', '0'); INSERT 3390930 1 booktown=# INSERT INTO dailyjnventory VALUES ('0441172717'. '!'); INSERT 3390931 1 booktown=# INSERT INTO dailyjnventory VALUES ('0451160916'); INSERT 3390932 1