2017-01-10 55 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

謝謝大家。

相關問題