我有表测试列有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中。
请协助。
答案 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')