oracle12个月份,sql – Oracle:不是一个有效的月份

1.

To_Date(To_Char(MaxDate,'DD/MM/YYYY')) = REP_DATE

造成了这个问题.当你使用没有时间格式的to_date时,oracle将使用当前会话NLS格式进行转换,在你的情况下可能不是“DD / MM / YYYY”.检查一下……

sql> select sysdate from dual;

SYSDATE

---------

26-SEP-12

Which means my session's setting is DD-Mon-YY

sql> select to_char(sysdate,'MM/DD/YYYY') from dual;

TO_CHAR(SY

----------

09/26/2012

sql> select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual;

select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual

*

ERROR at line 1:

ORA-01843: not a valid month

sql> select to_date(to_char(sysdate,'MM/DD/YYYY') from dual;

TO_DATE(T

---------

26-SEP-12

2.

更重要的是,为什么要转换为char然后到目前为止,而不是直接比较

MaxDate = REP_DATE

如果你想在比较之前忽略MaxDate中的时间组件,你应该使用..

trunc(MaxDate ) = rep_date

代替.

==更新:根据更新的问题.

Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00

我认为问题更复杂.如果rep_time只是时间,则不能将其作为日期存储在数据库中.它必须是字符串或日期到时间间隔或数字为秒(感谢Alex,见this).如果可能的话,我建议使用一个包含日期和时间的列rep_date,并将其直接与最大日期列进行比较.

如果它是一个正在运行的系统而你无法控制repdate,你可以试试这个.

trunc(rep_date) = trunc(maxdate) and

to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')

无论哪种方式,时间存储不正确(从1753年可以看出),可能还有其他问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值