Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398782
  • 博文数量: 93
  • 博客积分: 3006
  • 博客等级: 少校
  • 技术积分: 998
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-02 17:23
文章分类

全部博文(93)

文章存档

2011年(12)

2010年(38)

2009年(20)

2008年(23)

分类: 数据库开发技术

2010-09-25 15:48:35

在浏览本文之前请保证安装好SQL Server 2005。

Introduction

本文主要讲述在SQL Server 2005中Query(查询)Date Time(日期时间)会遇到的问题。

Section 1 - Problem

现在打算select FundHouse table中LastUpdateDate column中date为2008-5-21的records。

在SQL Server 2005中open FundHouse这个table可以看到在LastUpdateDate column下有以下值:
2008-5-21 19:38:36
2008-5-21 19:42:40
2008-5-21 19:43:45
2008-5-23 2:23:03
2008-5-23 2:34:43

New一个Query去select,尝试了以下几种形式:
select * from FundHouse where LastUpdateDate like '2008-5-21'
select * from FundHouse where LastUpdateDate like '2008-5-21%'
select * from FundHouse where LastUpdateDate like 2008-5-21
select * from FundHouse where LastUpdateDate like 2008-5-21%
select * from FundHouse where LastUpdateDate like '2008-5-21 19:38:36'
select * from FundHouse where LastUpdateDate= '2008-5-21 19:38:36'
select * from FundHouse where LastUpdateDate= '2008-5-21'

但第1~6种形式是不能正确把records select出来,只有第7种能正确select出来,这表示这不能用like和%来通配所有时间值。

从以上第5,6种形式可以看到即使具体到秒也不能把record select出来。

Section 2 - Reason

SQL Server 2005的datetime type存储的实际数据是精确到毫秒级的,但现在不确定是否与此有关。

Section 3 - Solution

可以用"<" or ">"或者"between ? and ?"设定范围来取值。

如用prepareStatement的话like ?这个问号不能set一个Date的date type它,因为在SQL Server 2005上测试,如以下两种写法都会select出不对的result:
select * from FundHouse where LastUpdateDate> 2008-5-21
select * from FundHouse where LastUpdateDate< 2008-5-21

经试验,只能用String date type来表示这个时间才能select出正确result,如下这样:
select * from FundHouse where LastUpdateDate> '2008-5-21'
select * from FundHouse where LastUpdateDate< '2008-5-21'




如果要查询精确到秒的数据例如查询 2010-09-22 15:23:12的数据

select * from FundHouse where UpdateDate between '2010-09-22 15:23:12

' and '2010-09-22 15:23:13';


时间增加一秒的java代码

String time=“2010-09-22 15:23:12”;

SimpleDateFormat df =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

java.util.Date cDate;

String endtime=time;

try {

cDate = df.parse(time);

Calendar cal = Calendar.getInstance();

cal.setTime(cDate);

cal.add(Calendar.SECOND, +1);

endtime=df.format(cal.getTime());

} catch (ParseException e) {

e.printStackTrace();

}

阅读(2590) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~