Oracle 日期似乎相等
Oracle date seems equals
我的数据库中有一个 table INCASSO:
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'
但是通过另一个查询,提取了 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开发者中,日期格式为:
我想知道是记录不同还是编辑器的日期格式有问题。如果记录基于日期不同,它们在日期的哪一部分不同?如果是编辑器格式日期问题,我该如何解决?
将日期格式更改为 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'
我已将 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'
表明年份不同:
谢谢大家
我的数据库中有一个 table INCASSO:
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'
但是通过另一个查询,提取了 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开发者中,日期格式为:
我想知道是记录不同还是编辑器的日期格式有问题。如果记录基于日期不同,它们在日期的哪一部分不同?如果是编辑器格式日期问题,我该如何解决?
将日期格式更改为 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'
我已将 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'
表明年份不同:
谢谢大家