Sql Oracle日期列值为0000

Sql Oracle日期列值为0000,sql,oracle,Sql,Oracle,我们需要在Oracle列中的日期数据类型中存储00-00-00。但甲骨文不允许 是否有其他表示法或存储方式?Oracle允许您插入日期1月1日: INSERT INTO table_name ( date_column ) VALUES ( DATE '0001-01-01' ); 我不知道这是否相关,但我曾经“被要求”存储1996年4月0日、1996年4月0日等。。真正的要求是,这些是不能分别分配到一天或一个月的财务交易(例如日记账凭证) 解决方法是使用实际日期(1996年4月1日,1996

我们需要在Oracle列中的日期数据类型中存储00-00-00。但甲骨文不允许


是否有其他表示法或存储方式?

Oracle允许您插入日期1月1日:

INSERT INTO table_name ( date_column ) VALUES ( DATE '0001-01-01' );

我不知道这是否相关,但我曾经“被要求”存储1996年4月0日、1996年4月0日等。。真正的要求是,这些是不能分别分配到一天或一个月的财务交易(例如日记账凭证)

解决方法是使用实际日期(1996年4月1日,1996年1月1日),并添加另一列,给出记录的“范围”--“D”、“M”、“Q”、“Y”

因此,如果需要1996年4月1日的所有事务,可以在my_date=date“1996-04-01”中添加date_scope='D'谓词,以确保只检索每日事务

如果需要1996年4月的所有交易

my_date between date '1996-04-01' and date '1996-04-30' and
date_scope in ('D','M')

这似乎是个坏主意。使用NULL表示未知/未设置。该值是什么意思?这不是一个有效的日期。Oracle是绝对正确的,因为在公历中没有月“零”和日“零”(不知道其他日期)。你为什么要储存这样的东西?什么不仅仅是存储
NULL
我们需要的
应该是
我们想要的
,而响应应该是
真正的(潜在的)问题陈述是什么?因为这可能是错误的解决方案
,这听起来非常像一个问题。你真正想要完成的是什么?是否必须使用无效的日期?或围栏柱值。一天的值可以是
2016-06-01->2016-06-02
,一个月的值可以是
2016-06-01->2016-07-01
(使用-exclusive-end value,而不是inclusive,使数学更容易,也允许任何程度的粒度;
2016-06-01 12:00->2016-06-01 13:00
,适用于一小时范围)。