暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在 Oracle 23c 中的布尔数据类型

185

版本 23c 引入了 SQL 布尔数据类型。数据类型 boolean 具有真值 TRUE 和 FALSE。如果没有 NOT NULL 约束,布尔数据类型还支持真值 UNKNOWN 作为空值。

无论数据类型出现在 Oracle SQL 语法中,您都可以使用布尔数据类型。例如,您可以在 CREATE TABLE 中使用关键字 BOOLEAN 或 BOOL 指定布尔列:

    CREATE TABLE example (id NUMBER, c1 BOOLEAN, c2 BOOL);

    你可以使用 SQL 关键字 TRUE、FALSE 和 NULL 分别表示状态“TRUE”、“FALSE”和“NULL”。例如,使用上面创建的表示例,您可以插入以下内容:

      INSERT INTO example VALUES (1, TRUE, NULL); 
      INSERT INTO example VALUES (2, FALSE, true);

      您可以使用文字来表示“TRUE”和“FALSE”状态。“TRUE”和“FALSE”中不强制区分大小写,可以全部小写、全部大写或大小写的组合。前导和尾随空格将被忽略。

      表示“TRUE”和“FALSE”的字符串文字如下表:

      STATETRUEFALSE

      -

      'true'

      'false'

      -

      'yes'

      'no'

      -

      'on'

      'off'

      -

      '1'

      '0'

      -

      't'

      'f'

      -

      'y'

      'n'

      请注意,数字转换为布尔值如下:

        • 0 转换为 FALSE。

        • 非 0 值(如 42 或 -3.14)转换为 TRUE。

      给出下面使用两个布尔列 c1 和 c2 创建的表示例:

        CREATE TABLE example (id NUMBER, c1 BOOLEAN, c2 BOOL);

        将以下行插入到 example 中:

          INSERT INTO example VALUES (1, TRUE, NULL);
          INSERT INTO example VALUES (2, FALSE, true);
          INSERT INTO example VALUES (3, 0, 'off');
          INSERT INTO example VALUES (4, 'no', 'yes');
          INSERT INTO example VALUES (5, 'f', 't' );
          INSERT INTO example VALUES (6, false, true);
          INSERT INTO example VALUES (7, 'on', 'off');
          INSERT INTO example VALUES (8, -3.14, 1);


          布尔类型列的 SELECT 始终返回 TRUE 、 FALSE 。NULL 值不返回任何内容。

            SELECT * FROM example;
            ID C1 C2
            ---------- ----- -----
            1 TRUE
            2 FALSE TRUE
            3 FALSE FALSE
            4 FALSE TRUE
            5 FALSE TRUE
            6 FALSE TRUE
            7 TRUE FALSE
            8 TRUE TRUE
            8 rows selected.

            布尔列的约束

            布尔列支持以下约束:

            • NOT NULL

            • UNIQUE

            • PRIMARY KEY

            • FOREIGN KEY

            • CHECK


            布尔值的比较和赋值

            支持以下比较运算符来比较布尔值:=、!=、< >、<、<=、>、>=、GREATEST、LEAST、[NOT] IN

              SELECT * FROM example WHERE c1 = c2;


              ID C1 C2
              ---------- ------- --------
              3 FALSE FALSE
              8 TRUE TRUE
                SELECT * FROM example e1
                WHERE c1 >= ALL (SELECT c2 FROM example e2 WHERE e2.id > e1.id);


                ID C1 C2
                ---------- ----- -------
                1 TRUE
                7 TRUE FALSE
                8 TRUE TRUE


                返回布尔值的布尔值运算

                您可以对 SQL 条件、布尔列和布尔常量使用 NOT、AND 和 OR 运算符。例如:

                   SELECT * FROM example WHERE NOT c2;


                  ID C1 C2
                  ---------- ------ ------
                  3 FALSE FALSE
                  7 TRUE FALSE
                    SELECT * FROM example WHERE c1 AND c2;


                    ID C1 C2
                    ---------- ----- -------
                    8 TRUE TRUE




                      SELECT * FROM example WHERE c1 AND TRUE;


                      ID C1 C2
                      ---------- ------- -------
                      7 TRUE FALSE
                      8 TRUE TRUE
                      1 TRUE


                        SELECT * FROM example WHERE c1 OR c2;


                        ID C1 C2
                        ---------- ----------- -----
                        1 TRUE
                        2 FALSE TRUE
                        4 FALSE TRUE
                        5 FALSE TRUE
                        6 FALSE TRUE
                        7 TRUE FALSE
                        8 TRUE TRUE


                        7 rows selected.


                        布尔运算符 NOT

                        NOT(真)为假。 NOT (FALSE) 为真。 NOT (NULL) 为 NULL。

                        布尔运算符 AND

                        AND 布尔运算符的真值表

                        ANDTRUEFALSENULL
                        TRUETRUEFALSENULL
                        FALSEFALSEFALSEFALSE
                        NULLFALSEFALSENULL

                        布尔运算符 OR

                        OR 布尔运算符的真值表

                        ORTRUEFALSENULL
                        TRUETRUETRUETRUE
                        FALSETRUEFALSENULL
                        NULLTRUENULLNULL

                        布尔运算符 IS

                        IS 布尔运算符的真值表

                        ISTRUEFALSENULL
                        TRUETRUEFALSEFALSE
                        FALSEFALSETRUEFALSE
                        NULLFALSEFALSETRUE

                        布尔运算符 IS NOT

                        IS NOT 布尔运算符的真值表

                        IS NOTTRUEFALSENULL
                        TRUEFALSETRUETRUE
                        FALSETRUEFALSETRUE
                        NULLTRUETRUEFALSE

                        除了支持 SQL 条件之外,NOT、AND 和 OR 运算符还支持对布尔列和布尔常量的操作。例如,下面这些都是有效的:

                          SELECT * FROM example WHERE NOT c2;
                          SELECT * FROM example WHERE c1 AND c2;
                          SELECT * FROM example WHERE c1 AND TRUE;
                          SELECT * FROM example WHERE c1 OR c2;

                          您可以在布尔值表达式上使用 IS [NOT] NULL 来确定其状态。例如:

                            SELECT * FROM example WHERE c2 IS NULL;


                            ID C1 C2
                            ---------- ----------- -----------
                            1 TRUE


                            SQL 表达式中的布尔值

                            只要使用 expr,SQL 语法就支持布尔表达式。

                            SQL 表达式和条件已得到增强,可以支持新的布尔数据类型。 

                            布尔数据类型和其他 Oracle 内置数据类型之间的 CAST

                            BOOLEAN 和其他 Oracle 内置数据类型之间的转换规则如下:

                            将 BOOLEAN 转换为 numeric 时:

                              • 如果布尔值为 true,则结果值为 1。

                              • 如果布尔值为 false,则结果值为 0。

                            将 numeric 转换为 BOOLEAN 时:

                              • 如果数值非零(例如 1、2、-3、1.2),则结果值为 true。

                              • 如果数值为零,则结果值为 false。


                            将 BOOLEAN 转换为 CHAR(n) 和 NCHAR(n) 时:

                              • 如果布尔值为 true 并且 n 不小于 4,则结果值为“TRUE”,并在右侧扩展 n - 4 个空格。

                              • 如果布尔值为 false 并且 n 不小于 5,则结果值为 'FALSE',并在右侧扩展 n – 5 个空格。

                              • 否则,会引发数据异常错误。


                            将字符串转换为布尔值时,字符串的前导和尾随空格将被忽略。如果生成的字符串是用于确定有效布尔值的可接受文字之一,则结果就是该有效布尔值。

                            将 BOOLEAN 转换为 VARCHAR(n)、NVARCHAR(n) 时:

                              • 如果布尔值为 true 并且 n 不小于 4,则结果值为 true。

                              • 如果布尔值为 false 并且 n 不小于 5,则结果值为 false。

                              • 否则,会引发数据异常错误。


                            您可以使用函数 TO_BOOLEAN 将字符值表达式或数值表达式显式转换为布尔值。

                            函数 TO_CHAR、TO_NCHAR、TO_CLOB、TO_NCLOB、TO_NUMBER、TO_BINARY_DOUBLE 和 TO_BINARY_FLOAT 具有布尔重载,用于将布尔值转换为数字或字符类型。

                            函数 TO_BOOLEAN

                            语法:

                            使用 TO_BOOLEAN 将字符值表达式或数值表达式显式转换为布尔值。

                            如果 expr 是字符串,则它的计算结果必须为允许的字符串输入。

                            expr 可以采用以下类型之一,或者为 null:

                              • CHAR、VARCHAR2、NCHAR、NVARCHAR2 类型的字符串

                              • NUMBER、BINARY_FLOAT 或 BINARY_DOUBLE 类型的数值

                              • BOOLEAN 类型的布尔值。


                              示例:

                              > SELECT TO_BOOLEAN(0), TO_BOOLEAN('true'), TO_BOOLEAN('no');
                              TO_BOOLEAN( TO_BOOLEAN( TO_BOOLEAN(
                              ----------- ----------- -----------
                              FALSE TRUE FALSE




                              > SELECT TO_BOOLEAN(1) FROM DUAL;
                              TO_BOOLEAN(
                              -----------
                              TRUE



                              文章转载自山东Oracle用户组,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                              评论