在oracle中以日期格式转换varchar字段数据

时间:2014-08-04 14:12:04

标签: sql oracle

我有表测试列有cretaed_dt和id.Both是varchar 2类型。

desc测试

ID Varchar2(30)
Created_Dt varchar2(30)

从测试中选择*

ID       created_dt
1        2014-07-22-12.23.49.832868
2        2014-08-04-19.40.11.787317
3        2014-06-15-19.40.11.787317

我需要在2014年7月21日至8月5日之间选择数据。理想的ID 1和2需要选择。

我无法执行此操作,因为创建的日期列位于varchar2中。

请协助。

2 个答案:

答案 0 :(得分:0)

虽然您的数据存储为varchar2(),但您仍然可以使用它。令人高兴的是,字符串采用正确的格式进行比较操作。所以:

where created_dte >= '2014-07-21' and created_dte < '2014-08-05'

可以使用varchar2()to_date()转换为日期。但是,只使用字符串就可以让Oracle利用列上的索引。

虽然您可以执行您想要的操作,但您应该将日期/时间以本机日期格式存储在数据库中。 Oracle拥有大量与日期相关的功能,然后可以访问。

答案 1 :(得分:0)

使用此:

with t as (
  select '1' id, '2014-07-22-12.23.49.832868' created_dt from dual union all
  select '2' id, '2014-08-04-19.40.11.787317' created_dt from dual union all
  select '3' id, '2014-06-15-19.40.11.787317' created_dt from dual 
)
select * 
  from t
 where to_timestamp(created_dt, 'yyyy-MM-dd-HH24.MI.SS.FF') between to_date('21 jul 2014', 'DD mon YYYY') and to_date('5 aug 2014', 'DD mon YYYY')