Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ORACLE中的解码函数未将日期01-01-1900作为输出_Oracle_Date_Oracle Sqldeveloper_Decode - Fatal编程技术网

ORACLE中的解码函数未将日期01-01-1900作为输出

ORACLE中的解码函数未将日期01-01-1900作为输出,oracle,date,oracle-sqldeveloper,decode,Oracle,Date,Oracle Sqldeveloper,Decode,在我们项目中的oracle中,解码功能是建议使用它们的指南,在转换日期01-01-1900时会出现问题。 考虑下面的解码< /P> CAST(DECODE(COL1,'A',DATECOL,TO_DATE('01011900','DDMMYYYY')) AS DATE) - (The CAST is also a mandatory guideline) If, COL1 DATECOL A 2019-04-05 B 2018-01-01 C 2020-05-01 我得到的

在我们项目中的oracle中,解码功能是建议使用它们的指南,在转换日期01-01-1900时会出现问题。 考虑下面的解码< /P>
CAST(DECODE(COL1,'A',DATECOL,TO_DATE('01011900','DDMMYYYY')) AS DATE) - (The CAST is also a mandatory guideline)

If,
COL1 DATECOL
A    2019-04-05
B    2018-01-01
C    2020-05-01
我得到的结果数据如下所示

COL1 OUTPUT
A    2019-04-05
B    2000-01-01
C    2000-01-01
解码功能给出的是2000-01-01,而不是1900-01-01。
我已经检查了NLS参数,并在TO_DATE函数中修改了不同的内容。没有任何结果。

数据库中的DATECOL是否可能实际上是一个字符串?因为如果是这种情况,那么DECODE总是使用第一个潜在的返回项来设置数据类型。一旦你开始混合和匹配数据类型,坏事情就会发生

比如说

SQL> alter session set nls_date_format = 'YY-MM-DD';

Session altered.

SQL> with t as
  2  ( select 'A' col1, '2010-01-01' datecol from dual union all
  3    select 'B' col1, '2010-01-01' datecol from dual )
  4  select  CAST(DECODE(COL1,'A',DATECOL,TO_DATE('01011900','DDMMYYYY')) AS DATE)
  5  from t;

CAST(DEC
--------
10-01-01
00-01-01
看起来还可以,但是如果我深入研究在所有的数据类型跳转之后实际返回的值

SQL> with t as
  2  ( select 'A' col1, '2010-01-01' datecol from dual union all
  3    select 'B' col1, '2010-01-01' datecol from dual )
  4  select  to_char(CAST(DECODE(COL1,'A',DATECOL,TO_DATE('01011900','DDMMYYYY')) AS DATE),'dd-mm-yyyy')
  5  from t;

TO_CHAR(CA
----------
01-01-2010
01-01-2000

您可以看到,缺少一个完整的世纪规范已经“破坏”了结果。特别是,您正在使用的工具(SQL Developer和其他工具)将有自己的结果格式,可以掩盖数据类型可能发生的情况。

这是您的真实代码吗?它应该有用。对我有用:好的,我同意。不过,若DATECOL列的数据类型是DATE,为什么要再次将其强制转换为DATE?这就足够了:
解码(COL1,'A',DATECOL,DATE'1900-01-01')