查询技巧咨询

[复制链接]
查看11 | 回复5 | 2013-1-28 09:12:18 | 显示全部楼层 |阅读模式
本帖最后由 jimn1982 于 2013-6-20 14:13 编辑
有这样一个表:
create table X
(
PDATE DATE,
PID NUMBER
);

insert into x (PDATE, PID)
values (to_date('11-06-2013', 'dd-mm-yyyy'), '1');
insert into x (PDATE, PID)
values (to_date('11-06-2013', 'dd-mm-yyyy'), '2');
insert into x (PDATE, PID)
values (to_date('11-06-2013', 'dd-mm-yyyy'), '3');
insert into x (PDATE, PID)
values (to_date('11-06-2013', 'dd-mm-yyyy'), '4');
insert into x (PDATE, PID)
values (to_date('12-06-2013', 'dd-mm-yyyy'), '1');
insert into x (PDATE, PID)
values (to_date('12-06-2013', 'dd-mm-yyyy'), '2');
insert into x (PDATE, PID)
values (to_date('12-06-2013', 'dd-mm-yyyy'), '3');
insert into x (PDATE, PID)
values (to_date('12-06-2013', 'dd-mm-yyyy'), '4');
commit;

PDATE
PID
----------- ----------
2013-6-11
1
2013-6-11
2
2013-6-11
3
2013-6-11
4
2013-6-12
1
2013-6-12
2
2013-6-12
3
2013-6-12
4

什么方法最好查询一个范围从pdate=2013-6-11和pid=4开始
到pdate=2013-6-12和pid=3为止的这几条记录










回复

使用道具 举报

千问 | 2013-1-28 09:12:18 | 显示全部楼层
本帖最后由 jimn1982 于 2013-6-20 14:17 编辑
select x.*
from x
where to_char(x.pdate, 'YYYYMMDD') || TO_CHAR(x.pid, 'fm000') between
'20130611004' and '20130612003'
PDATE
PID
----------- ----------
2013-6-11
4
2013-6-12
1
2013-6-12
2
2013-6-12
3
结果可行,就是用不了pdate的索引

回复

使用道具 举报

千问 | 2013-1-28 09:12:18 | 显示全部楼层
好像用常规的字段条件不行哦,还有别的方法吗
回复

使用道具 举报

千问 | 2013-1-28 09:12:18 | 显示全部楼层
用普通的字段比较大小
回复

使用道具 举报

千问 | 2013-1-28 09:12:18 | 显示全部楼层
select x.*
from x
where pdate between to_date('11-06-2013', 'dd-mm-yyyy') and to_date('12-06-2013', 'dd-mm-yyyy')
and pid 2013-6-11
and pdate = decode(pdate, to_date('11-06-2013', 'dd-mm-yyyy'), 4, pid)

回复

使用道具 举报

千问 | 2013-1-28 09:12:18 | 显示全部楼层
3833020 发表于 2013-6-20 14:44
的确错了。重写下:
select x.*


不错不错。好方法
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行