2017-01-10 60 views
4

有我的数据库中的表INCASSO:Oracle日期似乎等于

CREATE TABLE "GEC_AP"."INCASSO" 
("ID_INCASSO" VARCHAR2(50 BYTE) NOT NULL ENABLE, 
"ID_FATTURA" VARCHAR2(50 BYTE) NOT NULL ENABLE, 
"ID_PIANO_RATE" VARCHAR2(22 BYTE) DEFAULT -1 NOT NULL ENABLE, 
"DATA_ESECUZIONE" DATE DEFAULT SYSDATE NOT NULL ENABLE, 
...) 

主键包括四个领域:

CONSTRAINT "PK_INCASSO" PRIMARY KEY ("ID_INCASSO", "ID_FATTURA", "ID_PIANO_RATE", "DATA_ESECUZIONE") 

似乎有当我运行下面的查询重复记录:

select id_incasso, id_fattura, id_piano_rate, data_esecuzione 
from incasso 
where id_incasso = 'TO_20110521258225' 

enter image description here

但与另一个查询,0记录提取:

select id_incasso, id_fattura, id_piano_rate, data_esecuzione, count(*) 
from incasso where id_incasso = 'TO_20110521258225' 
group by id_incasso, id_fattura, id_piano_rate, data_esecuzione 
having count(*) > 1 

数据库是在Oracle 11.2.0.1.0和我使用的是SQL Developer的4.1.1.19。

在SQL Developer中,日期格式为:

enter image description here

我想知道,如果记录是不同的或有在编辑器中的格式日期的问题。如果记录根据日期不同而不同,哪部分日期不同?如果这是编辑器中的格式日期问题,我该如何解决它?

+1

只是查询转储(id_incasso),转储(id_fattura),...你会看到差异 –

+0

它不一定是日期。在字符串字段中也可能有隐藏的字符。 –

+0

@戈登 - 他的第二个查询返回零行。为什么?如果记录有任何不同,那么第二个查询应该已经显示出来。 – GurV

回答

2

将日期格式更改为DD-MON-YYYY HH24:MI:SS,您很可能会看到不同的日期有不同的世纪。

使用RR年来格式化可以隐藏一个日期是1911,另一个是2011

尝试:

SELECT TO_CHAR(DATE '2011-01-01', 'RR-MM-DD'), 
     TO_CHAR(DATE '1911-01-01', 'RR-MM-DD') 
FROM DUAL 

两者都将输出相同的,尽管它们是不同的日期,将不被分组一起。

如果日期仍然相同,则查找字符串中的其他空格或其他隐藏字符;您可以使用LENGTH()检查字符串或DUMP()的大小来获得内容的字节值:

select id_incasso, 
     id_fattura, 
     LENGTH(id_fattura) AS f_length, 
     id_piano_rate, 
     LENGTH(id_piano_rate) AS pr_length, 
     TO_CHAR(data_esecuzione, 'YYYY-MM-DD HH24:MI:SS') AS data_esecuzione 
from incasso 
where id_incasso = 'TO_20110521258225' 
+1

DATE列不太可能是OP问题的原因,因为第一个查询的结果中显示的值包含时间,并且两个行的值相同。恕我直言,这是可疑的varchar2列。 – Boneist

+0

它们是变数,所以尾随空格不应该出现。日期没有毫秒,或者没有,所以这个答案显示了一个非常合理的可能性。 – dlatikay

+0

@dlatikay DATE不会存储毫秒 – GurV

0

我已经改变了在SQL Developer中用于DD-MON-YYYY HH24日期格式:MI :SS 和下面的查询:

select id_incasso, id_fattura, id_piano_rate, data_esecuzione from incasso where id_incasso = 'TO_20110521258225' 

表明,不同的是在一年:in the year

谢谢大家。

相关问题