oracle - to_char 函数返回,Oracle Database 10g Express 10.2.0.1.0 中的零

标签 oracle oracle10g oracle-xe to-char to-date

让我们创建一个测试表来说明问题:

CREATE TABLE "TMP1" (
    "X" VARCHAR2(256 BYTE) NOT NULL
) LOGGING NOCOMPRESS NOCACHE;

INSERT INTO "TMP1" VALUES ('XxYyyyZzzWww_123456_0106201395810_0106201395810.csv');
INSERT INTO "TMP1" VALUES ('XxYyyyZzzWww_123456_31052013155754_31052013155754.csv');
INSERT INTO "TMP1" VALUES ('XxYyyyZzzWww_123456_02062013130000_02062013130000.csv');

现在提出请求:

select
        TMP2.X
    , TMP2.STARTDATETIME
    , to_char(TMP2.STARTDATETIME, 'DDMMYYYYHH24MISS') "to_char(StartDateTime)"
    , TMP2.ENDDATETIME
    , to_char(TMP2.ENDDATETIME, 'DDMMYYYYHH24MISS') "to_char(EndDateTime)"
from (
        select
                "X"
            , to_date(case length(regexp_substr("X", '\d+', 1, 2, 'i'))
                            when 14 then regexp_substr("X", '\d+', 1, 2, 'i')
                            when 13 then substr(regexp_substr("X", '\d+', 1, 2, 'i'), 0, 8) 
                                || '0' || substr(regexp_substr("X", '\d+', 1, 2, 'i'), 9)
                end, 'DDMMYYYYHH24MISS') StartDateTime

            , to_date(case length(regexp_substr("X", '\d+', 1, 3, 'i'))
                            when 14 then regexp_substr("X", '\d+', 1, 3, 'i')
                            when 13 then substr(regexp_substr("X", '\d+', 1, 3, 'i'), 0, 8) 
                                || '0' || substr(regexp_substr("X", '\d+', 1, 3, 'i'), 9)
                end, 'DDMMYYYYHH24MISS') EndDateTime
        from
            "TMP1"
) TMP2;

在此查询中,我们删除了一个子字符串并将其转换为日期。然后我们尝试做逆向转换,但是不行。

结果:

enter image description here

to_date 函数正常工作,但 to_char 函数不工作。

最佳答案

您的示例工作正常。

我怀疑您的 Oracle 数据库实例存在问题 - 内部 SQL 重写/优化存在一些错误,Oracle 最终执行了错误重写的查询。我会尝试关闭重写(查找 QUERY REWRITE ENABLED、EXPLAIN_REWRITE、EXPLAIN_PLAN)。

有时重新启动数据库会有所帮助。

关于oracle - to_char 函数返回,Oracle Database 10g Express 10.2.0.1.0 中的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19006128/

相关文章:

oracle - 生成数

database - Oracle自动授予权限

sql - Oracle SQL 查询中的方括号是什么意思?

java - 错误: ORA-02289: sequence does not exist in hibernate

oracle - 请求超出了oracle数据库允许的最大限制

oracle - JDBC 连接失败并出现 ORA-12516

fedora - Oracle pro*c 给出错误 PCC-F-NOERRFILE,无法打开错误消息文件,工具 PR2

oracle - Oracle 中是否支持使用 Liquibase 的 Auto_Increment

具有子查询分解的 Oracle DELETE 语句

Oracle 日期 - 如何添加至今的年份