时间在数据库中的查询问题

kafeleung 2003-09-04 09:44:18
我要将一些日期插到数据库,我作这样的处理:

java.util.Date date = new java.util.Date(System.currentTimeMillis());
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String Datetime = df.format(date);
String sql="insert into table (datetime) values (Datetime)";
.....

但当要查询数据库的时候,例如要找回10天前的记录,我这样处理:
int days=10;
java.util.Date date = new java.util.Date(System.currentTimeMillis()-days*24*60*60*1000);
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String BeforeDatetime = df.format(date);
String sql="select * from table where datetime<=BeforeDatetime";
....
这个查询是成功的,
但如果要查30天以上,BeforeDatetime就不准确了,甚至返回比现在时间还有以后的时间。

我想问下,你们是怎样处理时间在数据库中的查询?
...全文
82 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dreamsky15 2003-09-04
  • 打赏
  • 举报
回复
不知你的是什么数据库,若是Oracle8i或以上,则插入时间时:
sql="insert into table1 (datetime) values (SysDate)";
日期自动精确到毫秒。
提取时
sql = " select * from table1 where (trunc(sysdate,'dd')) -
(trunc(datetime,'dd')) <= 30 ";
这样就能提取30天内的数据,其他天数类推。
输出日期格式化:
java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date datetime = RS.getDate("datetime");
String BeforeDatetime = df.format(datetime);
out.println(BeforeDatetime);

jscsqb 2003-09-04
  • 打赏
  • 举报
回复
String BeforeDatetime = df.format(date);
BeforeDatetime应该弄成一个时间型数据。
jscsqb 2003-09-04
  • 打赏
  • 举报
回复
30天或24天以上或者更少用上面的方法都不会准确,因为一个月可以有28、29、30、31天,
怎么能限定死一个月就是30天呢?
mtou 2003-09-04
  • 打赏
  • 举报
回复
如果你用的是sql server可以这样写sql
days=-(days);
String sql="select * from table where datetime<=DATEADD(day, "+days+", getdate()) ";
kafeleung 2003-09-04
  • 打赏
  • 举报
回复
可以讲详细一些吗?如何使用PreparedStatemet + java.sql.Timestamp处理时间
cbhyk 2003-09-04
  • 打赏
  • 举报
回复
用PreparedStatemet + java.sql.Timestamp处理时间
Alicechina 2003-09-04
  • 打赏
  • 举报
回复
我想问一下,我插入数据库中是这样子的:
String sql="insert into table (datetime1) values (getdate())";
这样子在数据库中存在的数据格式就是2003-8-30 12:25:20:803,连微秒都显示出来了,怎样才能不要那个微秒啊?
同时我要从数据库中读出时间时,如果只要年月日而不要其它的该用什么函数啊?
cbhyk 2003-09-04
  • 打赏
  • 举报
回复
用PreparedStatement + java.sql.Timestamp处理时间
kafeleung 2003-09-04
  • 打赏
  • 举报
回复
试过,不知道为何,如果按以上的方法只能查询24日之内的,是正确的,但是大于24日,就有错误了。
kafeleung 2003-09-04
  • 打赏
  • 举报
回复
to mtou:
试过你的,还是老样子,不行
kafeleung 2003-09-04
  • 打赏
  • 举报
回复
Datetime类型
Leapiny 2003-09-04
  • 打赏
  • 举报
回复
你的数据库里面存时间的字段是什么类型呀?
String??
mtou 2003-09-04
  • 打赏
  • 举报
回复
java.util.Date date = new java.util.Date(System.currentTimeMillis()-days*24*60*60*1000);
换成:
java.util.Date date=new java.util.Date ();
long tt=date.getTime();
long yy=tt-days*24*60*60*1000;
date.setTime(yy) ;
hanps 2003-09-04
  • 打赏
  • 举报
回复
时间用字符串传人到sql中
用数据库的函数对数据进行处理
cbhyk 2003-09-04
  • 打赏
  • 举报
回复
1.插入
String sql="insert into table (datetime) values (?)";
Date date = ...
Connection conn = ...
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setTimestamp(1, new java.sql.Timestamp(date.getTime()));
pstmt.executeUpdate();
...

2.查询
String sql="select * from table where datetime<=?";
Date date = ...
Connection conn = ...
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setTimestamp(1, new java.sql.Timestamp(date.getTime()));
ResultSet rs = pstmt.executeQuery();
...
niexin 2003-09-04
  • 打赏
  • 举报
回复
java.sql.Date d=new java.sql.Date(0,0,1);
sql="select employ_id,employ_time from employ_info order by employ_id";
sqlRst=sqlStmt.executeQuery(sql);
sql_2="select * from employ_info ";
int i=0;
while(sqlRst.next())
{
d=sqlRst.getDate("employ_time");
if(d.after(before))
{
if(d.before(after))
{
if (i==0)
{
sql_2+=" where";
}
if (i!=0)
{
sql_2+=" or";
}
i++;
sql_2+=" employ_id=\""+sqlRst.getString("employ_id")+"\"";
}
}
}
sqlRst=sqlStmt.executeQuery(sql_2);
}

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧