数据库
db2的
方案
我有一个需要为true或false的列。我找到了两个指向如何实现这个目标的来源;但是,当我把它们放在一起时,我得到一个错误。
当前解决方案
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?
答案 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:
- 无法在结果集中返回布尔数据类型。