
请问ORACLE如何求出2012年以前所有的1月1号到1月3号的数据,即往年的某一时段的所有数据
4个回答
展开全部
如果日期列是日期类型:
seelct * from 表名 where to_char(日期,'mmdd') between '0101' and '0103' and to_char(日期,'yyyy')<='2012';
如果日期列是字符串类型:(假设数据格式是YYYYMMDD)
select * from 表名 where substr(日期,1,4)<='2012' and substr(日期,5,4) between '0101' and '0103';
如果格式不是上述8位年月日的写法(如2012-01-01,2012/01/01,请自行调整SUBSTR中截取起始位置和字符数两个参数。
seelct * from 表名 where to_char(日期,'mmdd') between '0101' and '0103' and to_char(日期,'yyyy')<='2012';
如果日期列是字符串类型:(假设数据格式是YYYYMMDD)
select * from 表名 where substr(日期,1,4)<='2012' and substr(日期,5,4) between '0101' and '0103';
如果格式不是上述8位年月日的写法(如2012-01-01,2012/01/01,请自行调整SUBSTR中截取起始位置和字符数两个参数。
更多追问追答
追问
我日期格式是date类型的 如果改为字符串的话 运行效率会不会慢啊,还有 如果跨年的话是不是就不好处理了呢?
追答
如果日期列上有索引,则性能有一定差距,因为TO_CHAR以后,将不再使用索引。如果没有索引,性能会有轻微影响,但基本可以不计。
跨年是什么意思?这个查询的结果是包含历年的数据,2012-01-01到2012-01-03,2011年的同期。2010年的同期。总之是你表里所有1月1日到1月3日的数据。
展开全部
SELECT * FROM TABLE WHERE SUBSTR(CREATE_DATE,1,4) = '2012'
AND CREATE_DATE BETWEEN '20120101' AND '20120103'
AND CREATE_DATE BETWEEN '20120101' AND '20120103'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看你的日期是什么格式了,可以用substr截取字段.比如日期格式为2012-01-01
select * from table where substr(date,6,5) between '01-01' and '01-03' and substr(date,1,4) < '2013'
substr(date,6,5)表示截取date字段,从第6个字符开始,取5个字符
select * from table where substr(date,6,5) between '01-01' and '01-03' and substr(date,1,4) < '2013'
substr(date,6,5)表示截取date字段,从第6个字符开始,取5个字符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
between 1月1日 and 1月3日
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询