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. Обязательно загрузите руководство сегодня!

В этом руководстве мы рассмотрим следующие темы:

  1. Что такое тип данных BIT?
  2. Пример использования типа данных BIT в качестве логического значения.
  3. Использование столбца BIT в выражении CASE
  4. Советы, рекомендации и ссылки.

Давайте приступим.

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. Логический тип данных.

Булево значение должно содержать только два значения, но может содержать три возможных значения:

  1. True
  2. Ложь
  3. 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.