你是如何处理数据库中的按日期查询?

鉴客 发布于 2011/06/21 07:43
阅读 5K+
收藏 1

假设有一张日志表 log ,该表有一个字段 log_time 类型是日期时间(包含时分秒),相当于 datetime ,不同数据库中表达有所不同。

一般大家在处理这种表的按日期查询是怎么做的?例如我要看从10号到20号的日志

1. 在程序中构造查询参数

SELECT * FROM log WHERE log_time >='2011-6-10 00:00:00' AND log_time < '2011-6-21 00:00:00'

2. 使用日期函数

SELECT * FROM log WHERE DATE(log_time) >='2011-6-10' AND DATE(log_time)<'2011-6-21'

似乎第二种方法无法用上索引。

大家一般是怎么处理呢?

加载中
0
华宰
华宰

只是有时候在使用客户端查看数据的时候,为了编写SQL方便才使用第二种方式。

程序上是专门写一个方法用来将日期对象的时分秒清零,然后传递给 SQL 查询

例如

Calendar cal = Calendar.getInstance();
cal.setTime(the_date);
cal.set(Calendar.HOUR,0);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);
0
mark35
mark35

MYSQL第二种方式不走索引的。

直接在程序(PHP/JAVA)里面把日期格式化成第一种方式的,然后用第一种方式来查询。

0
programtic
programtic
我一般用第二种方式,请问:日期类型,要建索引吗?
0
蟋蟀哥哥
蟋蟀哥哥
不报错 2011-6-10 00:00:00这种格式啊..
  保存成129387198238这种秒数的格式
0
lake_1
lake_1

log_time >=to_date('2011-6-10 00:00:00','yyyy-mm-dd HH24:mi:ss')

0
Sky__
Sky__
日期,我全用字符串处理,统一格式!
0
笨蛋EGG
笨蛋EGG
貌似我用convert,在查询的转换···低效?!恩··想想也是···应该是挺低效的···好,,改正···
返回顶部
顶部