为啥 DB2 数据库中的 DATE 中包含时间组件?

Posted

技术标签:

【中文标题】为啥 DB2 数据库中的 DATE 中包含时间组件?【英文标题】:Why does DATE in DB2 database have a time component in it?为什么 DB2 数据库中的 DATE 中包含时间组件? 【发布时间】:2017-07-19 08:18:36 【问题描述】:

如何使列数据类型为 DATE,如 YYYY-MM-DD;

当我创建一个数据类型为 DATE 的表时,它将变为TIMESTAMP(0)

ALTER SET DATA TYPE DATE的时候还是TIMESTAMP(0)SELECT CHAR(CURRENT DATE, ISO) FROM SYSIBM.SYSDUMMY1; SQLCODE=-171 将出错,当前日期为 2017-02-28 19:19:09.0 太长了。

数据库信息:DB2 linux x64 10.5

CREATE TABLE "XCRSUSR"."TIMP_TASK_SERIAL" (
        "SERIAL_NO" DECIMAL(16 , 0), 
        "TASK_NAME" VARCHAR(10), 
        "TASK_TYPE" DOUBLE, 
        "TASK_XML" CLOB(10) INLINE LENGTH 164, 
        "SEND_TIME" DATE, 
        "FINISH_TIME" DATE, 
        "TASK_STATUS" DOUBLE DEFAULT 0, 
        "RUN_TYPE" DOUBLE, 
        "FLAG" DOUBLE, 
        "TASK_ID" VARCHAR(10)
    )
    ORGANIZE BY ROW
    DATA CAPTURE NONE 
    IN "CREDIT_U_16" INDEX IN "CREDIT_INDEX_16"
    COMPRESS NO;

ALTER TABLE TIMP_TASK_SERIAL ALTER COLUMN SEND_TIME SET DATA TYPE DATE;
select CURRENT DATE from SYSIBM.SYSDUMMY1; 
 1
 ---------------------
 2017-02-28 19:19:09.0

【问题讨论】:

ibm.com/support/knowledgecenter/zh/SSEPGG_10.5.0/… 如果您的数据库处于 Oracle 兼容模式,DATE 数据类型实际上是 TIMESTAMP 以模仿 Oracle 的,它同时具有数据和时间组件。如果不需要 Oracle 兼容性,请禁用它;如果你这样做了,那么这是预期的行为。 是的,它真的很喜欢那样。所以,如何禁用 Oracle 兼容性,特别是 date_compat。只有 db2cmd? 我想搜索 date_compat 的设置。所以我可以测试和验证 【参考方案1】:

查看设置

Oracle_Compatibility

向量下

https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.apdv.porting.doc/doc/r0052867.html

表 1 中的第 7 位是您要查找的 wjat。

【讨论】:

现在,我想在没有 Oracle_Compatibility 的情况下使用 Oracle_Compatibility。应该设置什么 DB2_COMPATIBILITY_VECTOR 为什么 03 表示 1 (0x01) ROWNUM 伪列和 2 (0x02) DUAL 表 70FFF-0x40=70FBF? db2set DB2_COMPATIBILITY_VECTOR=70FBF 请注意 1) 更改现有数据库的兼容性向量不会影响现有对象 2) 某些功能(例如DUAL)仅在创建数据库时生效。

以上是关于为啥 DB2 数据库中的 DATE 中包含时间组件?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Ruby 的 bcrypt 库在哈希中包含明文中的盐? [复制]

为啥对象表达式中的代码可以从 kotlin 中包含它的范围访问变量?

为啥标识符可以在 C 中包含“$”? [复制]

如何确保仅从特定表中选择第一条记录,该表可以在 DB2 中包含多个相同 ID 的记录

为啥我必须在这个插入语句中包含主键列?

为啥 Kotlin 数据类可以在 Gson 的不可空字段中包含空值?