关于betweent .. and ..使用在DATE类型上 的疑惑

[复制链接]
查看11 | 回复2 | 2006-12-26 07:41:45 | 显示全部楼层 |阅读模式
如果要查找发生在 &p_date_from=2006/01/01 到&p_date_to=2006/01/31 之间的数据
可以采用如下写法。
[php]
mmt.transaction_date between
to_date('&p_date_from 00:00:00', 'yyyy/mm/dd hh24:mi:ss') and
to_date('&p_date_to 23:59:59', 'yyyy/mm/dd hh24:mi:ss')]
[/php]
这种写法能找出2006/01/01 00:00:00 到 2006/01/3123:59:59 之间的数据。
如果采用如下写法的话
[php]
trunc(mmt.transaction_date) between
to_date('&p_date_from ', 'yyyy/mm/dd') and
to_date('&p_date_to', 'yyyy/mm/dd ')
[/php]
也能够,
但是别人告诉我最好不用这种写法。而且日期格式最好选用 dd-mon-yy 这种格式。
请问如上两种写法在同等条件下实现的方式上有什么区别吗?
那条语句的性能更好。
日期格式采用dd-mon-yy 格式有什么好处?
另外各位大牛还有什么其他的比较好的写法的话请告之...
先谢各位了.
回复

使用道具 举报

千问 | 2006-12-26 07:41:45 | 显示全部楼层
最初由 kenni 发布
[B]如果要查找发生在 &p_date_from=2006/01/01 到&p_date_to=2006/01/31 之间的数据
可以采用如下写法。
[php]
mmt.transaction_date between
to_date('&p_date_from 00:00:00', 'yyyy/mm/dd hh24:mi:ss') and
to_date('&p_date_to 23:59:59', 'yyyy/mm/dd hh24:mi:ss')]
[/php]
这种写法能找出2006/01/01 00:00:00 到 2006/01/3123:59:59 之间的数据。
如果采用如下写法的话
[php]
trunc(mmt.transaction_date) between
to_date('&p_date_from ', 'yyyy/mm/dd') and
to_date('&p_date_to', 'yyyy/mm/dd ')
[/php]
也能够,
但是别人告诉我最好不用这种写法。而且日期格式最好选用 dd-mon-yy 这种格式。
请问如上两种写法在同等条件下实现的方式上有什么区别吗?
那条语句的性能更好。
日期格式采用dd-mon-yy 格式有什么好处?
另外各位大牛还有什么其他的比较好的写法的话请告之...
先谢各位了. [/B]

日期采用哪种格式并不重要,不过一般情况下使用YYYY-MM-DD HH24:MI:SS格式的最多。
重要的是,不要对日期类进行函数操作,否则将无法使用索引,而且效率很低。
个人感觉取一个时间段的话,最好的写法是
DATE_COL >= TO_DATE('2006-11-23 0:0:0', 'YYYY-MM-DD HH24:MI:SS')
AND DATE_COL =跟","=跟<的格式,尽量少用between and。如果实在想用的话,建议用Date_Col Between Date_From And Date_To - 0.00001 [/B]
Date_To - 0.00001能直接减么?
数据类型不一致吧..
TEST 一下.
回复

使用道具 举报

千问 | 2006-12-26 07:41:45 | 显示全部楼层
我用
between start_date and end_date - 1/(24*60*60)
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行