Boolean sql тип: PostgreSQL : Документация: 9.5: 8.6. Логический тип : Компания Postgres Professional
Содержание
Требуется логическое значение SQL Server? Используйте тип данных BIT!
Время чтения: 6 минут
При создании таблицы или объекта базы данных в SQL Server обязательно будут случаи, когда вам потребуется сохранить логическое значение (также известное как true или false ). Но существует ли такая вещь, как SQL Server Boolean ?
В SQL Server абсолютно точно существует тип данных, который мы можем использовать для представления логического значения. Было бы удобно, если бы этот тип данных назывался просто bool или boolean , но это не так. Тип данных, который мы можем использовать, называется BIT .
В этом очень коротком руководстве мы узнаем все об удобном типе данных BIT, который мы можем использовать для хранения логического значения SQL Server.
Тип данных BIT упоминается в следующем БЕСПЛАТНОМ руководстве :
БЕСПЛАТНАЯ электронная книга по типам данных SQL Server!
В этом руководстве представлен краткий обзор наиболее распространенных типов данных, включая тип данных BIT, которые вы будете использовать в своей карьере разработчика баз данных. Это определенно будет хорошим ресурсом для вас, когда вы будете продолжать запрашивать и разрабатывать базы данных SQL Server. Обязательно загрузите руководство сегодня!
В этом руководстве мы рассмотрим следующие темы:
- Что такое тип данных BIT?
- Пример использования типа данных BIT в качестве логического значения.
- Использование столбца BIT в выражении CASE
- Советы, рекомендации и ссылки.
Давайте приступим.
1. Что такое тип данных BIT?
Тип данных BIT — это целочисленный тип данных, который хранит только значение 1 или 0 (или NULL).
Если вы знакомы с программированием, вы уже понимаете, как мы можем представить значения True или False , используя числа 1 или 0 соответственно. Поскольку BIT может хранить только 1 или 0 , это идеальный тип данных для использования, если мы хотим сохранить значение true или false (также известное как логическое значение) в SQL Server.
2. Пример
использования типа данных BIT в качестве логического значения.
Тип данных BIT очень прост для понимания. Давайте создадим простую таблицу Products со столбцом InStock , чтобы продемонстрировать использование BIT.
Вот таблица Products со столбцом InStock с типом данных BIT:
CREATE TABLE Products ( ProdID INT IDENTITY, Название продуктаVARCHAR(20), Цена ДЕСЯТИЧНАЯ(5,2), БИТ в наличии )
Как следует из названия столбца, мы будем использовать этот столбец, чтобы сообщить нам, есть ли рассматриваемый Продукт в наличии или он полностью распродан.
Давайте добавим новый продукт, который в настоящее время на складе :
ВСТАВИТЬ В ПРОДУКТЫ (название продукта, цена, наличие на складе) значения ('Large Bench', 198.00, 1)
(В нашем операторе INSERT нам не нужно указывать значение для столбца ProdID , потому что он использует удобное свойство IDENTITY)
Теперь, если мы проверим данные , мы можем видеть, что значение для столбца InStock равно 1 , конечно:
Поскольку мы знаем, что 1 означает «истина», а 0 означает «ложь», мы можем с уверенностью сказать, что продукт «Большая скамья» находится в факт, в наличии .
Давайте добавим товар, которого нет в наличии ( InStock установите на 0 ):
INSERT INTO Products (ProductName, Price, InStock) values ('Coffee Table', 225.00, 0)
Теперь, если мы проверим данные, мы можем сказать, что «Coffee Table» отсутствует на складе :
Ребята, вот и все!
3. Использование столбца BIT в выражении CASE
Один из наиболее распространенных способов сделать тип данных BIT более readable в запросе означает использовать его в удобном операторе CASE.
Используя оператор CASE, мы можем вернуть пользователю более очевидное значение, чем просто 1 или 0 . Наши конечные пользователи могут на самом деле не знать, что означает 1 или 0.
Они могут подумать, что число в этой колонке относится к количеству товара на складе. Они смотрели на данные и думали: « Вау, у нас очень мало запасов. Если у нас вообще есть продукт, то только ОДИН! »
Итак, давайте посмотрим, сможем ли мы написать лучший запрос, чтобы было немного более очевидно, что наш столбец в основном представляет собой столбец true/false, относящийся к статусу каждого продукта в нашем инвентаре.
Вот хороший запрос с использованием оператора CASE:
SELECT ProdID, ProductName, Price, КЕЙС В наличии КОГДА 1 ТОГДА 'Да' КОГДА 0 ТО 'Нет' ЗАКАНЧИВАТЬСЯ КАК "Товар в наличии?" FROM Products
В этом запросе используется простой оператор CASE . Существует также другой способ написать это с помощью искал оператор CASE .
Взгляните на полный учебник, чтобы узнать больше: Заявление SQL Server CASE: практическое руководство is not:
Конечно, мы можем очень легко изменить метки в этом столбце. Мы можем изменить имя столбца на «Статус товара» или «В наличии?» , например. Или мы могли бы изменить значения замены на ‘ 9Например, 0005 True и ‘ False ’ или ‘ В наличии ’ и ‘ Нет в наличии ’. Что вы хотите!
Дело в том, что назначение нового столбца теперь совершенно очевидно для конечного пользователя: Сообщить нам, есть товар на складе или нет!
4. Советы, рекомендации и ссылки.
Вот список советов и приемов, которые следует знать при работе с типом данных BIT:
Совет № 1: Если вы попытаетесь вставить любое число, отличное от 0, вместо 9 будет вставлено значение 1.0029
Давайте добавим еще одну строку в нашу таблицу Products , указав InStock значение , отличное от 0 :
INSERT INTO Products (ProductName, Price, InStock) значения («Разделочная доска», 85.00, 9383)
Теперь давайте проверим данные:
Когда мы вставляем что-то отличное от 0 , 1 вставляется. И люди, это произойдет для любого числа, которое НЕ НУЛЬ, даже если число равно отрицательный или десятичный . Сумасшедший!
Совет № 2. Единственный способ получить значение 0 — это вставить значение 0
. Так что, если буквально что-то отличное от 0 в конечном итоге вставит 1 в столбец, это не должно быть сюрпризом чтобы узнать, что единственный способ ввести значение 0 в столбец — это вставить значение 0 !
Единственный способ получить 0 — поставить 0 . Очень тривиально 🙂
Совет №3: Вы можете использовать строковые значения ‘True’ или ‘False’ и значения 1 или 0 будут вставлены соответственно
SQL Server очень умный . Если хотите, вы можете выделить буквальные слова « True » или « False », чтобы вставить значение 1 или 0 соответственно в столбец BIT. Давайте попробуем:
ВСТАВЬТЕ В ПРОДУКТЫ (название продукта, цена, наличие на складе) ценности («Подставка для специй», 45.00, «ПРАВДА»), («Барный стул», 60.00, «ЛОЖЬ»)
Вот данные:
Мой разум BLOWN
Ссылки
Вот официальная документация по SQL Server BIT тип данных: BIT (Transact-SQL) 90 003
Убедитесь, что вы проверили это .
Следующие шаги:
Не забудьте загрузить БЕСПЛАТНОЕ руководство :
БЕСПЛАТНУЮ электронную книгу по типам данных SQL Server!
В этом руководстве рассматриваются наиболее распространенные типы данных, с которыми вы столкнетесь в своей карьере разработчика базы данных или администратора. Убедитесь, что вы получили руководство, чтобы изучить их все!
Кроме того, тип данных BIT является одним из нескольких целочисленных типов данных, доступных нам в SQL Server. Взгляните на следующий учебник, чтобы узнать все о других целочисленных типах данных:
Целочисленные типы данных SQL: все, что вам нужно знать
Большое спасибо за чтение!
Не забудьте подписаться на мою рассылку, чтобы получать специальные предложения и уведомления каждый раз, когда выходит новый учебник!
Спасибо за прочтение! Если у вас есть какие-либо вопросы, или если вы боретесь с другой темой, связанной с SQL Server, я буду рад обсудить это. Оставьте комментарий или посетите мою контактную страницу и отправьте мне электронное письмо!
Новый тип данных для SQL
Новый тип данных был добавлен в Db2 для языка определения данных i , DDL , как часть IBM i 7.5, но не был добавлен в IBM i 7.4 TR 6. Логический тип данных.
Булево значение должно содержать только два значения, но может содержать три возможных значения:
- True
- Ложь
- Null — если не содержит данных
Мне это нравится. В течение многих, многих лет я создавал «логические» столбцы или поля, чтобы содержать логику типа истина/ложь. Но поскольку столбцы/поля были либо символьными, либо числовыми, они могли содержать любое допустимое значение этого типа данных. Теперь у меня может быть столбец для обозначения таких вещей, как:
- Товар есть на складе
- Элемент находится в статусе ожидания
- Определенная информация была предоставлена или сопровождает что-либо
Вы поняли.
Логический столбец может быть определен в таблице SQL так же просто, как:
01 СОЗДАТЬ ТАБЛИЦУ MYLIB.TESTTABLE 02 (СТОЛБЦ1 BOOLEAN, 03 COLUMN2 СИМВОЛ(10) ; |
Как выглядит этот столбец, когда я его проверяю? Я могу использовать SQL View SYSCOLUMNS для этого:
ВЫБЕРИТЕ TABLE_NAME,COLUMN_NAME,DATA_TYPE,LENGTH ИЗ QSYS2.SYSCOLUMNS ГДЕ TABLE_SCHEMA = 'MYLIB' AND TABLE_NAME = 'TESTTABLE' ; |
Возвращаются две строки, по одной для каждого столбца в таблице:
TABLE_NAME COLUMN_NAME DATA_TYPE ДЛИНА ---------- ----------- --------- ------ ТЕСТОВАЯ ТАБЛИЦА 1 BOOLEAN 1 ТАБЛИЧНАЯ КОЛОНКА 2 СИМВ. 10 |
Я даже могу использовать команду DSPFFD:
ФАЙЛ DSPFFD (ТАБЛИЦА ДЛЯ ПРОВЕРКИ) |
В нижней части вывода я могу найти «Информацию об уровне поля»:
Информация на уровне поля Поле данных Тип поля Длина СТОЛБЦ1 логическое значение 1 Разрешает нулевое значение COLUMN2 СИМВОЛ 10 |
Если тип данных Boolean содержит данные, он будет возвращать только:
- true
- ложь
Обратите внимание, что эти значения в нижнем регистре.
Как вставить значения в этот новый тип данных? Используя оператор Insert, конечно.
ВСТАВИТЬ В ПРОВЕРЯЕМЫЕ ЗНАЧЕНИЯ (ИСТИНА, '1'), (ложь, '2'), (ПО УМОЛЧАНИЮ,'3') ; |
Этот оператор SQL Insert вставит в таблицу три строки. Я использовал верхний регистр «ИСТИНА», нижний регистр «ложь» и значение столбца по умолчанию для логического столбца. Как это выглядит, когда я извлекаю строки из таблицы:
ВЫБЕРИТЕ * ИЗ ТЕСТИРОВАННОЙ ТАБЛИЦЫ ; |
Когда я использую ACS’s Run SQL Scripts, я возвращаюсь:
СТОЛБЦ1 СТОЛБЦ2 ------- ------- правда 1 ложь 2 <НОЛЬ> 3 |
Логические значения всегда будут отображаться в нижнем регистре, независимо от того, как они вставляются или обновляются.
Если бы я когда-либо хотел просто вернуть истинные строки, я мог бы использовать любое из следующего:
SELECT * FROM TESTTABLE WHERE COLUMN1 IS TRUE ; SELECT * FROM TESTTABLE WHERE COLUMN1 = TRUE; SELECT * FROM TESTTABLE WHERE COLUMN1 ; |
Если я заменю TRUE на FALSE, я верну только строки со значением false.
Будьте осторожны, если я буду использовать:
SELECT * FROM TESTTABLE, ГДЕ COLUMN1 НЕ ИСТИНА; SELECT * FROM TESTTABLE WHERE COLUMN1 TRUE ; SELECT * FROM TESTTABLE WHERE NOT COLUMN1 ; |
Я получаю больше, чем строки со значением false, я также верну те строки, которые также являются нулевыми.
Может быть время, когда я не хочу возвращать true и false в своих результатах. Я могу использовать целочисленную функцию INT для преобразования логических значений в целочисленные значения:
SELECT A.*,INT(COLUMN1) FROM TESTTABLE A ; СТОЛБЦ1 СТОЛБЦ2 00003 ------- ------- ----- правда 1 1 ложь 2 0 <НУЛЬ> 3 <НУЛЬ> |
Существуют и другие значения, которые я могу использовать вместо TRUE и FALSE при вставке данных в логический столбец. Вот еще несколько примеров:
01 ВСТАВИТЬ В ТАБЛИЧНЫЕ ЗНАЧЕНИЯ('t','4'),('f','5'), 02 ("1", "6"), ("0", "7"), 03 (вкл. , '8'), (выкл., '9'), 04 ('г','10'),('НЕТ','11'), 05 (НУЛЬ,'12') ; 06 ВЫБЕРИТЕ * ИЗ ТАБЛИЦЫ ; |
Первая строка каждой строки, кроме строки 5, вставляет истинное значение. Второе ложное значение. Строка 5 вставит нуль в логическую колонку. Оператор Select, строка 6, возвращает все вставленные строки:
. СТОЛБЦ1 СТОЛБЦ2 ------- ------- правда 1 ложь 2 <НОЛЬ> 3 правда 4 ложь 5 правда 6 ложь 7 правда 8 ложь 9 правда 10 ложь 11 <НУЛЬ> 12 |
Все вышеперечисленное нормально, но справляется ли РПГ с новым типом данных. Позвольте мне начать с простой программы, которая просто читает TESTTABLE: 9.0003
01 **бесплатно 02 ctl-opt option(*srcstmt) alwnull(*usrctl) ; 03 dcl-f TESTTABLE переименовать(TESTTABLE:INPUT) ; 04 доу (%eof) ; 05 читать ВХОД ; 06 dsply('Boolean = ' + COLUMN1 + ' Other = ' + %trimr(COLUMN2) + ' EOF = ' + %eof) ; 07 энддо ; 08 *inlr = *вкл ; |
Строка 1: Современные RPG всегда абсолютно бесплатны .
Строка 2: мне нужна опция управления ALWNULL, так как COLUMN1 может содержать null.
Строка 3: определение файла для TESTTABLE. Мне пришлось использовать RENAME, поскольку формат записи для TESTTABLE имеет то же имя, что и файл.
Строки 4–7: Этот цикл выполнения считывает все строки из таблицы, а затем отображает значения из столбцов в таблице и индикатор конца файла.
Когда я компилирую исходный код в программу, я вижу, что компиляция преобразовала логический столбец в столбец индикатора:
IINPUT *---------------------------------------------------------------- --------- * Формат записи РПГ. . . . : ВХОД * Внешний формат. . . . . : ТЕСТОВАЯ ТАБЛИЦА : MYLIB/ТЕСТОВАЯ ТАБЛИЦА *---------------------------------------------------------------- --------- I (ALWNULL) N 1 1 COLUMN1 I (ALWNULL) A 2 11 COLUMN2 |
При вызове программы отображается следующее.
DSPLY Boolean = 0 Другое = 2 EOF = 0 DSPLY Boolean = 0 Другое = 3 EOF = 0 DSPLY Boolean = 1 Другое = 4 EOF = 0 DSPLY Boolean = 0 Другое = 5 EOF = 0 DSPLY Boolean = 1 Другое = 6 EOF = 0 DSPLY Boolean = 0 Другое = 7 EOF = 0 DSPLY Boolean = 1 Другое = 8 EOF = 0 DSPLY Boolean = 0 Другое = 9 EOF = 0 DSPLY Boolean = 1 Другое = 10 EOF = 0 DSPLY Boolean = 0 Другое = 11 EOF = 0 DSPLY Boolean = 0 Другое = 12 EOF = 0 DSPLY Boolean = 0 Другое = 12 EOF = 1 |
Я редко использую собственный ввод-вывод RPG. Я использую встроенный SQL для получения данных из интересующих меня таблиц и файлов. В этом примере я использую выборку нескольких строк в массив структуры данных. Исходный код этой RPG выглядит так:
01 **бесплатно 02 ctl-opt option(*srcstmt) alwnull(*usrctl) ; 03 dcl-ds Данные extname('TESTTABLE') квалифицированный dim(12) ; 04 конец-дс ; 05 dcl-ds Неопределенные значения dim(12) ; 06 Ind int(5) тусклый(2) ; 07 конец-дс ; 08 exec sql DECLARE C0 CURSOR ДЛЯ 09ВЫБЕРИТЕ * ИЗ ТЕСТИРОВАННОЙ ТАБЛИЦЫ 10 ТОЛЬКО ДЛЯ ЧТЕНИЯ ; 11 exec sql ОТКРЫТЬ C0 ; 12 exec sql FETCH C0 FOR 12 ROWS INTO: Data: Nulls; 13 exec sql ЗАКРЫТЬ C0 ; 14 *inlr = *on ; |
Строки 3 и 4: массив структур данных, содержащий данные из TESTTABLE.
Строки 5–7: Я хочу знать, какие строки имеют нулевое значение в COLUMN1, поэтому мне нужно использовать массив с одним элементом для каждого столбца в таблице, строка 6. И я хочу сделать это «два размерный» массив для хранения того же количества элементов — это мой предыдущий массив структуры данных.
Строки 8–10: определение курсора, который я буду использовать.
Строка 11: Откройте курсор.
Строка 12: выборка 12 строк из таблицы в массив данных структуры данных. Перед Nulls запятая не ставится, поэтому нулевые индикаторы перемещаются в этот массив структуры данных.
Строка 13: Закройте курсор.
После компиляции этого исходного кода в программу я добавляю точку останова отладки в строке 14. Затем я вызываю программу.
Когда я останавливаюсь в точке останова, я могу просмотреть содержимое массива структур данных данных:
ДАННЫЕ.COLUMN1(1) = '1' ДАННЫЕ.COLUMN2(1) = '1' ДАННЫЕ.COLUMN1(2) = '0' ДАННЫЕ.COLUMN2(2) = '2' ДАННЫЕ.COLUMN1(3) = '0' ДАННЫЕ.COLUMN2(3) = '3' ДАННЫЕ.COLUMN1(4) = '1' ДАННЫЕ.COLUMN2(4) = '4' ДАННЫЕ.COLUMN1(5) = '0' ДАННЫЕ.COLUMN2(5) = '5' ДАННЫЕ.COLUMN1(6) = '1' ДАННЫЕ.COLUMN2(6) = '6' ДАННЫЕ.СТОЛБ1(7) = '0' ДАННЫЕ.COLUMN2(7) = '7' ДАННЫЕ.COLUMN1(8) = '1' ДАННЫЕ. COLUMN2(8) = '8' ДАННЫЕ.COLUMN1(9) = '0' ДАННЫЕ.COLUMN2(9) = '9' ДАННЫЕ.COLUMN1(10) = '1' ДАННЫЕ.СТОЛБЦ2(10) = '10' ДАННЫЕ.СТОЛБ1(11) = '0' ДАННЫЕ.COLUMN2(11) = '11' ДАННЫЕ.COLUMN1(12) = '0' ДАННЫЕ.COLUMN2(12) = '12' |
И затем я могу посмотреть на массив структуры данных нулевого индикатора, чтобы увидеть, какие строки COLUMN1 равны нулю:
> нули EVAL НУЛИ.ИНД(1,1) = 0 НУЛИ.ИНД(1,2) = 0 НУЛИ.ИНД(2,1) = 0 НУЛИ.ИНД(2,2) = 0 НУЛИ.ИНД(3,1) = -1 НУЛИ.ИНД(3,2) = 0 НУЛИ.ИНД(4,1) = 0 НУЛИ.ИНД(4,2) = 0 НУЛИ.ИНД(5,1) = 0 НУЛИ.ИНД(5,2) = 0 НУЛИ.ИНД(6,1) = 0 НУЛИ.ИНД(6,2) = 0 НУЛИ.ИНД(7,1) = 0 НУЛИ.ИНД(7,2) = 0 НУЛИ.ИНД(8,1) = 0 НУЛИ.ИНД(8,2) = 0 НУЛИ.ИНД(9,2) = 0 НУЛИ.ИНД(10,1) = 0 НУЛИ.ИНД(10,2) = 0 НУЛИ.ИНД(11,1) = 0 НУЛИ.ИНД(11,2) = 0 НУЛИ.ИНД(12,1) = -1 НУЛИ.ИНД(12,2) = 0 |
Третий и двенадцатый ряды.
Существует еще один способ обработки нулей из таблицы при выборке из курсора с помощью IFNULL.
01 **бесплатно 02 опция ctl-opt(*srcstmt) ; 03 dcl-ds Данные extname('TESTTABLE') квалифицированный dim(12) ; 04 конец-дс ; 05 exec sql DECLARE C0 CURSOR ДЛЯ 06 SELECT IFNULL(COLUMN1,'0'),COLUMN2 07 ИЗ ИСПЫТАННОЙ ТАБЛИЦЫ 08 ТОЛЬКО ДЛЯ ЧТЕНИЯ ; 09exec sql ОТКРЫТЬ C0 ; 10 exec sql FETCH C0 FOR 12 ROWS INTO :Data ; 11 exec sql ЗАКРЫТЬ C0 ; 12 *inlr = *вкл ; |
Массив нулевых индикаторов не требуется.
Строка 6: мне нужно перечислить столбцы в таблице, чтобы я мог использовать IFNULL с COLUMN. Если COLUMN1 имеет значение null, я заменю его значением «0», что равнозначно false.
Я покажу только первые три элемента массива из данных, поскольку третья строка была нулевой:
> ОЦЕНКА данных ДАННЫЕ.COLUMN1(1) = '1' ДАННЫЕ.COLUMN2(1) = '1' ДАННЫЕ.COLUMN1(2) = '0' ДАННЫЕ.COLUMN2(2) = '2' ДАННЫЕ.COLUMN1(3) = '0' ДАННЫЕ.COLUMN2(3) = '3' |
Как видите, теперь это то же самое, что и ложный элемент, второй.
Я могу вставлять строки в TESTTABLE, используя значения, описанные выше для логического столбца. Но когда RPG преобразовал это в индикатор, я подумал, могу ли я вставить его в COLUMN1, используя индикатор RPG.
01 **бесплатно 02 опция ctl-opt(*srcstmt) ; 03 dcl-s Индикатор ind ; 04 exec sql SET OPTION COMMIT = *NONE ; 05 exec sql ВСТАВИТЬ В ТАБЛИЧНЫЕ ЗНАЧЕНИЯ(:Индикатор,'A') ; 06 Индикатор = *включен ; 07 exec sql ВСТАВИТЬ В ТАБЛИЧНЫЕ ЗНАЧЕНИЯ(:Индикатор,'B') ; 08 *inlr = *вкл ; |
Строка 3: я определил переменную индикатора.
Строка 4: Я использовал SET OPTION, чтобы показать, что я не буду использовать управление фиксацией при вставке своих строк.
Строка 5: Первая вставка. В этот момент индикатор выключен.
Строка 6: Включите индикатор.
строка 7: Вставьте вторую строку в таблицу.
Я пробовал это с индикаторами *IN XX , но они не разрешены в операторе Insert.
После компиляции и вызова программы были вставлены две строки.
СТОЛБЦ1 СТОЛБЦ2 ------- ------- ложный А правда Б |
В моем последнем примере я хотел узнать, как CL будет обрабатывать логический тип данных. Это был пример программы CL:
01 ПГМ 02 DCL VAR(&LOOP) TYPE(*LGL) VALUE('1') 03 ФАЙЛ DCLF (Тестовая таблица) ALWNULL (*YES) 04 СОСТОЯНИЕ ПОЛОЖЕНИЯ (&ПЕТЛЯ) 05 RCVF 06 MONMSG MSGID(CPF0864) EXEC(ОСТАВИТЬ) 07 ДМПКПЛГМ 08 КОНЕЦ 09 ЭНДГМ |
Строка 3: При объявлении моего файла TESTTABLE мне нужно добавить ключевое слово ALWNULL, чтобы программа не выдавала ошибку, когда в COLUMN1 встречается нуль.
Строки 4–8: цикл Do для чтения всех строк из файла.
Строка 6: Когда встречается конец файла, цикл завершается.
Строка 7: я делаю дамп программы, чтобы зафиксировать значения переменных файла.
После компиляции программы вызываю ее. Создано двенадцать дампов, но меня интересуют только первые три. Когда я перехожу к нижней части, я вижу значения в переменных файла:
Тип переменной Длина Значение *...+....1. &COLUMN1 *СИМВОЛ 1 '1' &COLUMN2 *СИМВОЛ 10 '1' Тип переменной Длина Значение *...+....1. &COLUMN1 *СИМВОЛ 1 '0' &COLUMN2 *СИМВОЛ 10 '2' Тип переменной Длина Значение *...+....1. &COLUMN1 *СИМВОЛ 1 '0' &COLUMN2 *СИМВОЛ 10 '3' |
Это показывает, что CL преобразовал логический столбец в односимвольную переменную, а значение NULL в третьей строке было преобразовано в ‘0’.
Выше я упомянул, что использовал сценарии запуска SQL ACS для работы с логическими данными. Это потому, что он показывает истинное и ложное. Если бы я использовал команду STRSQL, я бы увидел:
СТОЛБЦ1 СТОЛБЦ2 ------- ------ 1 1 0 2 - 3 |
Если вы все еще используете STRSQL, это еще одна причина перейти к сценариям запуска SQL.