请问ORACLE如何求出2012年以前所有的1月1号到1月3号的数据,即往年的某一时段的所有数据

 我来答
ct2k01
2012-12-13 · TA获得超过1571个赞
知道小有建树答主
回答量:1653
采纳率:0%
帮助的人:1180万
展开全部
如果日期列是日期类型:
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日的数据。
dl_会飞的青蛙
2012-12-13 · TA获得超过2458个赞
知道大有可为答主
回答量:3294
采纳率:0%
帮助的人:3588万
展开全部
SELECT * FROM TABLE WHERE SUBSTR(CREATE_DATE,1,4) = '2012'
AND CREATE_DATE BETWEEN '20120101' AND '20120103'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MAFIA幽冥
2012-12-13 · TA获得超过878个赞
知道小有建树答主
回答量:1701
采纳率:0%
帮助的人:553万
展开全部
看你的日期是什么格式了,可以用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个字符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
愚木龙
2012-12-13
知道答主
回答量:11
采纳率:0%
帮助的人:4.3万
展开全部
between 1月1日 and 1月3日
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式