通过比较时间戳来获取计数时“不是有效月份”

时间:2016-06-15 19:18:17

标签: sql oracle

我试图查看有多少项目比3年更早。当我使用

select count (*) from ae_dt509 where field13 < to_timestamp( '2013-06-15 00:00:00', 'YY-MM-DD HH:MI:SS' )

我收到此错误:

Error starting at line 1 in command:
select count (*) from ae_dt509 where field13 < to_timestamp( '2013-06-12 00:00:00', 'YY-MM-DD HH:MI:SS' )
Error report:
SQL Error: ORA-01843: not a valid month
01843. 00000 -  "not a valid month"
*Cause:    
*Action:

我不确定这是错的......

修改

我更改了代码以更正年份:

select count (*) from ae_dt509 where field13 < to_timestamp( '2013-06-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS' )

我得到了同样的错误。

然后通过删除日期周围的qoutes来改变它:

select count (*) from ae_dt509 where field13 < to_timestamp( 2013-06-15 00:00:00, 'YYYY-MM-DD HH24:MI:SS' )

得到了

Bind Variable "00" is NOT DECLARED

2 个答案:

答案 0 :(得分:1)

问题似乎是field13不是日期或时间戳字段。

例如,如果我在本地服务器上运行以下语句:

select * from (
  select '2013-06-12 00:00:00' as some_fake_date
  from dual
)
where some_fake_date > systimestamp

...我得到了和你一样的错误。

要解决您的问题,请使用field13和相应的格式参数包装to_timestamp

where to_timestamp(field13, '<insert_correct_format_specifier>' < to_timestamp('2013-06-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS')

这当然意味着如果您依赖field13上的索引,您的预表现会降低。理想情况下,您应将field13的列类型修改为实际日期或时间戳。

答案 1 :(得分:0)

来自ae_dt509的选择计数(),其中field13&lt; to_timestamp(2013-06-15 00:00:00,&#39; YYYY-MM-DD HH24:MI:SS&#39;)*投掷 Bind Variable&#34; 00&#34;未声明,因为日期未包含在&#39;&#39;引号