在Db2中处理BOOLEAN值的最佳方法是什么?

时间:2018-03-20 16:31:32

标签: sql db2

数据库

db2的

方案

我有一个需要为true或false的列。我找到了两个指向如何实现这个目标的来源;但是,当我把它们放在一起时,我得到一个错误。

  1. Boolean values
  2. Casting between data types
  3. 当前解决方案

    CREATE TABLE USERS
    (
       ID INT NOT NULL,
       .
       .
       .
       IS_LOCKED SMALLINT NOT NULL WITH DEFAULT 0,
       PRIMARY KEY(ID)
    );
    

    SELECT U.ID, CAST(U.IS_LOCKED AS BOOLEAN) as IS_LOCKED FROM USERS U

    错误:A value with data type "SYSIBM.SMALLINT" cannot be CAST to type "SYSIBM.BOOLEAN"

    问题

    如何在Db2中使用BOOLEAN?

3 个答案:

答案 0 :(得分:1)

Linux / Unix / Windows上的Db2 V11.1支持BOOLEAN作为列数据类型,并且可以在结果集中返回此类列。以下是使用命令行处理器(在bash shell中)的示例:

create table mytable( id integer, mybool boolean with default true )
DB20000I  The SQL command completed successfully.

insert into mytable(id, mybool) values (1, false), (2, true), (3, false)
DB20000I  The SQL command completed successfully.

select id,mybool from mytable order by 1

ID          MYBOOL
----------- ------
          1      0
          2      1
          3      0

  3 record(s) selected.

但是,虽然普通DDL和SQL DML的CLP支持布尔值,但请考虑使用Db2 column-datatype boolean对应用程序的影响。检查PHP,Python,Java,.net等如何根据用于访问数据库的任何语言来操作此数据类型。

提示:在寻求有关Db2的帮助时,总是提到你的Db2版本和运行Db2服务器的操作系统(即z / os,iSeries,linux / unix / windows)并相应地标记你的问题。

答案 1 :(得分:1)

您提供了Db2 11.1手册的链接,以及DB2 9.7手册的第二个链接。这就是你的答案。在Db2 11.1.1.1中支持BOOLEAN作为列数据类型,但在DB2 9.7中不支持。

在此处查看针对Db2 11.1的Mod Pack 1修订包1列出的增强功能https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.wn.doc/doc/c0061179.html#c0061179__FP1,其中显示

  

BOOLEAN数据类型现在可用于表列和表达式结果。这增强了与其他关系数据库管理系统的兼容性

答案 2 :(得分:0)

在其他数据库中,您可以是明确的:

select (case when u.isLocked = 0 then FALSE else TRUE end)

但DB2 explicitly在编程代码中只支持boolean:

  
      
  • 无法在结果集中返回布尔数据类型。
  •