2017-01-10 9 views
4

等しいようです:Oracleの日は私のデータベース内のテーブルINCASSOがある

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

@Gordon - 彼の2番目のクエリはゼロ行を返しました。どうして?レコードが異なっていれば、2番目のクエリはそれを示しているはずです。 – GurV

答えて

2

日付の書式をDD-MON-YYYY HH24:MI:SSに変更すると、日付の世紀が異なるという違いが生じる可能性があります。彼らは異なる日付で、グループ化されることはありませんが、

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

どちらも意志の出力と同じ:年フォーマットするRRを使用し

は、1日が1911であり、他は2011

てみていることを隠すことができます一緒に。

日付が変わらない場合は、文字列にスペースやその他の隠し文字がないかどうかを確認してください。あなたは、コンテンツのバイト値を取得するには、文字列の大きさやDUMP()をチェックするLENGTH()を使用することができます。

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の問題の原因とはなりません。 IMHO、それは疑わしいvarchar2の列です。 – Boneist

+0

これらはvarcharsなので、末尾のスペースは発生しません。日付はミリ秒単位ではありませんが、この回答は非常に合理的な可能性を示しています。 – dlatikay

+0

@dlatikay DATEはミリ秒を格納しません – GurV

0

私はDD-MON-YYYY HH24にSQL Developerで使用される日付形式に変更しました:MIを:SS し、次の問合せ:in the year

みんなありがとう:

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

は差は年間であることを示しています。

関連する問題