求一个 狗牙资源百度云资源 可以付钱谢谢

SQL语句查询两个时间之间的数据
我的图书馆
SQL语句查询两个时间之间的数据
MySQL数据库, hibernate框架,hql语句:from Product p where p.isdelete=0 and p.uptime between '"+date1+"' and '"+date2+"' order by p.votenum desc"注:p.uptime ,在数据库中是DATETIME类型;date1、date2是“ yyyy-MM-dd HH:mm:ss” 格式的字符串。
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&数据库between
and的用法 - ITeye问答
今天有一个同事问我一个sql语句的问题 select * from 表 where time between '' and
'' 他说查出来的结果没有包括 '' 和 '' 这二个时间.问我有什么办法没有
我当时第一相应就是. select * from 表 where time between ' 00:00:00' and
' 23:59:59'
我一般在处理时间问题都是这样的方法.
在字段上使用函数这种情况下需要建立函数索引,函数不能使用字段本身的索引。全表扫描是否头疼是由你需要返回的订单列表数量决定的。大结果集全表扫描效率比较高。小结果集索引效率比较高。
魔力猫咪 写道是否使用索引是要看情况的,不是使用了就是好。如果读取的表记录非常多,那么很多时候全扫描比索引好。
放到这个语句中。如果取记录非常多,那么trunc(time, 'dd‘)不用索引比较好。如果每次取得的记录很少,查询次数又非常多,可以考虑函数索引。
我问的是这个函数可不可能使用上已在这个字段上建的索引.....
你想一下比如想到某个日期应该交货的定单列表.(可能为空) 如果没有索引是不是一个很头痛的全表扫描呢?
是否使用索引是要看情况的,不是使用了就是好。如果读取的表记录非常多,那么很多时候全扫描比索引好。放到这个语句中。如果取记录非常多,那么trunc(time, 'dd‘)不用索引比较好。如果每次取得的记录很少,查询次数又非常多,可以考虑函数索引。
魔力猫咪 写道Oracle中可以使用trunc(日期, 'dd')将日期精确到天。其他数据库不清楚是否有同样函数不知道能不能使用到索引
Oracle中可以使用trunc(日期, 'dd')将日期精确到天。其他数据库不清楚是否有同样函数
为么不用时间戳呢
已解决问题
未解决问题用户名:leizhimin
文章数:731
评论数:2722
注册日期:
阅读量:1297
阅读量:3317
阅读量:435119
阅读量:1122617
51CTO推荐博文
MySQL5指定时间段查询问题(已解决)
今天在做数据分发同步工具的时候遇到了点问题,MySQL5按照字段的时间段范围查询不能成功的问题。
现在问题还没有解决,下面是我专门为了一个低级的查询写了个JDBC测试,连接池什么的统统不要,将问题的范围尽量缩小。
原因是PreparedStatement设置java.sql.Date参数没有被认为传递的是合法的Date,而查询不到数据。如果你不用JDBC、不用PreparedStatement,你是发现不到这个问题的。
MySQL5.1.30
CREATE TABLE genreparam (&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&genre_id int(11) NOT NULL,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&updatenum bigint(20) DEFAULT '0',&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&ishd bigint(1) DEFAULT NULL,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&kind bigint(20) DEFAULT NULL,&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&clicks bigint(20) DEFAULT '0',&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&create_time datetime NOT NULL,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&update_time datetime NOT NULL,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&PRIMARY KEY (genre_id)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&) ENGINE=MyISAM DEFAULT CHARSET=utf8&&&&&&&&
要求传递两个参数,用来控制update_time字段的范围,查询数据库记录。
测试代码:
import java.sql.*; import java.util.ArrayL import java.util.C import java.util.L public class TestJDBC { &&&&&&&&private static final String genreparam_sql = "" + &&&&&&&&&&&&&&&&&&&&&&&&"select genre_id, updatenum, ishd, kind, clicks, create_time, update_time\n" + &&&&&&&&&&&&&&&&&&&&&&&&"&&&&from genreparam\n" + &&&&&&&&&&&&&&&&&&&&&&&&" where update_time BETWEEN ? AND ? \n" + &&&&&&&&&&&&&&&&&&&&&&&&" limit ?," + 300; &&&&&&&&private static final String genreparam1_sql = "" + &&&&&&&&&&&&&&&&&&&&&&&&"select genre_id, updatenum, ishd, kind, clicks, create_time, update_time\n" + &&&&&&&&&&&&&&&&&&&&&&&&"&&&&from genreparam\n" + &&&&&&&&&&&&&&&&&&&&&&&&" where DATE_FORMAT(update_time, '%Y-%c-%e %T') BETWEEN ? AND ? \n" + &&&&&&&&&&&&&&&&&&&&&&&&" limit ?," + 300; &&&&&&&&public static void main(String[] args) throws SQLException, ClassNotFoundException { &&&&&&&&&&&&&&&&Class.forName("com.mysql.jdbc.Driver"); &&&&&&&&&&&&&&&&String user = "vcom"; &&&&&&&&&&&&&&&&String pswd = "vcom"; &&&&&&&&&&&&&&&&String dburl = "jdbc:mysql://192.168.104.163:3306/VOD3_01"; &&&&&&&&&&&&&&&&Connection conn = DriverManager.getConnection(dburl, user, pswd); &&&&&&&&&&&&&&&&System.out.println(conn == null); //&&&&&&&&&&&&&&&&List&Genreparam& genList = new ArrayList&Genreparam&(); &&&&&&&&&&&&&&&&Calendar c = Calendar.getInstance(); &&&&&&&&&&&&&&&&c.set(); &&&&&&&&&&&&&&&&Date _start = new Date(c.getTimeInMillis()); &&&&&&&&&&&&&&&&Date _end = new Date(System.currentTimeMillis()); &&&&&&&&&&&&&&&&System.out.println(_start); &&&&&&&&&&&&&&&&System.out.println(_end); &&&&&&&&&&&&&&&&PreparedStatement pstmt = conn.prepareStatement(genreparam1_sql); &&&&&&&&&&&&&&&&pstmt.setDate(1, _start); &&&&&&&&&&&&&&&&pstmt.setDate(2, _end); &&&&&&&&&&&&&&&&pstmt.setString(1, " 00:00:00"); &&&&&&&&&&&&&&&&pstmt.setString(2, " 00:00:00"); &&&&&&&&&&&&&&&&pstmt.setInt(3, 0); &&&&&&&&&&&&&&&&ResultSet rs = pstmt.executeQuery(); &&&&&&&&&&&&&&&&int i = 0; &&&&&&&&&&&&&&&&while (rs.next()) { //&&&&&&&&&&&&&&&&&&&&&&&&Genreparam genreparam = new Genreparam(); //&&&&&&&&&&&&&&&&&&&&&&&&genreparam.setGenre_id(rs.getLong("genre_id")); //&&&&&&&&&&&&&&&&&&&&&&&&genreparam.setUpdatenum(rs.getLong("updatenum")); //&&&&&&&&&&&&&&&&&&&&&&&&genreparam.setIshd(rs.getInt("ishd")); //&&&&&&&&&&&&&&&&&&&&&&&&genreparam.setKind(rs.getInt("kind")); //&&&&&&&&&&&&&&&&&&&&&&&&genreparam.setClicks(rs.getLong("clicks")); //&&&&&&&&&&&&&&&&&&&&&&&&genreparam.setCreate_time(rs.getDate("create_time")); //&&&&&&&&&&&&&&&&&&&&&&&&genreparam.setUpdate_time(rs.getDate("update_time")); //&&&&&&&&&&&&&&&&&&&&&&&&genList.add(genreparam); &&&&&&&&&&&&&&&&&&&&&&&&i++; &&&&&&&&&&&&&&&&} &&&&&&&&&&&&&&&&rs.close(); &&&&&&&&&&&&&&&&conn.close(); &&&&&&&&&&&&&&&&System.out.println("查询记录总数为:" + i); &&&&&&&&} }
传递java.sql.Date参数总查不到数据,于是修改为传递字符串,才勉强获取到了。。
查询记录总数为:4 Process finished with exit code 0
SELECT * &&&&FROM genreparam WHERE DATE_FORMAT(update_time, '%Y-%c-%e %T') BETWEEN ' 00:00:00' AND&&&&' 00:00:00'
查询了4条记录。
三、思考与解决
究竟是什么原因呢,日期不能直接做大小比较吗?
最终发现,MySQL对日期的比较直接可以用字符串来比较,比如:
select genre_id, updatenum, ishd, kind, clicks, create_time, update_time &&&&from genreparam where update_time & ' 00:00:00 '
虽然,' 00:00:00 '不是日期类型,但仍然可以做比较。
下面看看如果将字符串转为日期呢,能否比较呢?
select genre_id, updatenum, ishd, kind, clicks, create_time, update_time &&&&from genreparam where update_time & TIMESTAMP(' 00:00:00 ')
执行结果依然正确。
这就非常让人迷惑了,为什么不能直接传递一个java.sql.Date参数就挂了呢?
在此,实在很无奈,就写个格式化方法吧,将Date参数改为传String参数就可以了。
&&&&&&&&private static final String data_format = "yyyy-MM-dd kk:mm:ss"; &&&&&&&&public static String data2ISOString(java.util.Date date) { &&&&&&&&&&&&&&&&SimpleDateFormat sf = new SimpleDateFormat(data_format); &&&&&&&&&&&&&&&&return sf.format(date); &&&&&&&&}
这样,问题就彻底得到解决了。
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 狗牙 2009 百度云 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信