日期比较问题,分不够再加!!!

aredline 2004-08-25 02:47:19
日期比较:
数据库表xjff中有出生日期这个字段:borndate,我设置的是字符型(不想改成日期型)。
现在想实现的目标是显示所有超过14周岁的人的资料。怎么办?
...全文
373 点赞 收藏 25
写回复
25 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
drugon 2004-08-26
SQL语句中的比较要用字符串的比较,因为你的数据库中的类型是字符串类型的,所以你要做几步的转换,首先进行字符串的截取,得到记录中的年的字符串,然后转换成日期型的;接着和当前的年份比较。或者你直接用字符串的比较也可了,
如String SQL="select * from xjff where"+borndate.subString(0,4)+"< 1986";
因为在java中你比较字符串,它会按字典顺序来排序的。
回复
weepp 2004-08-26
理解!
回复
aredline 2004-08-26
发现如果:
if (now-getTime(formatter)/(365*24*60*60*1000))>14
提示:
C:\Apache Group\Tomcat 5.0\work\Catalina\localhost\jhsy\org\apache\jsp\gqtishi_jsp.java:306: illegal start of expression
if (now-getTime(formatter)/(365*24*60*60*1000))>14
^
回复
aredline 2004-08-26
if ((now-long(getTime(formatter)))/(365*24*60*60*1000))>14

怎么提示我这句有错误?
Generated servlet error:
[javac] Compiling 1 source file

C:\Apache Group\Tomcat 5.0\work\Catalina\localhost\jhsy\org\apache\jsp\gqtishi_jsp.java:306: ')' expected
if ((now-long(getTime(formatter)))/(365*24*60*60*1000))>14
回复
aredline 2004-08-26
谢谢大家,结贴
回复
Bluecatr 2004-08-26
不会吧,还没搞定,getTime()不是这样用的,算了给你一个例子吧,你怎么不看doc的帮助看看getTime()怎么用的。

import java.util.Date;

public class NameApplication
{
public static void main(String args[])
{
Date d2 = new Date(2004,8,13);
Date d1 = new Date(1979,8,12);
long tt = d2.getTime()-d1.getTime();
long dddd = tt/86400000;
System.out.println(dddd);
}
}

上面是比较判断两个时间内相差多少天,稍微改改就能用了
回复
power17 2004-08-26
当然上面写的没有什么实用价值。只是想说明一下我的思路和方法而已
回复
power17 2004-08-26

这是我帮楼主写的代码,你看一下,我已经调试过了
不过有一点不同的是数据库的date类型是datetime类型的。
至于你说的那个问题,你可以三个select 怎么样
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<%
String DRV="com.microsoft.jdbc.sqlserver.SQLServerDriver";
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=web";
String user="sa";
String pwd="";
String dt="2002";
String sqlStmt="select * from pic where date>"+dt;
Class.forName(DRV);
Connection conn=DriverManager.getConnection(url,user,pwd);
PreparedStatement stmt=conn.prepareStatement
(sqlStmt,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=stmt.executeQuery();
while(rs.next()){
String str=rs.getString(2);
out.println(str);
}
%>

</body>
</html>
回复
aredline 2004-08-26
这个出生日期吧,我选择用字符型,主要因为是从页面输入的,向数据库中插入的时候也简单,不出错,如果是日期型的,还得检验,插入的时候也容易出错。我是这么想的
回复
aredline 2004-08-26
String SQL="select * from xjff where"+borndate.subString(0,4)+"< 1986";
这么用不对,
回复
power17 2004-08-26
楼主为什么要把简单的事情搞复杂,你在数据库里用个datetime.你的问题是不是再简单不过

了,干吗要钟情于char.
回复
aredline 2004-08-26
回复
Bluecatr 2004-08-25
你不是已经将字符串类型转换成日期类型的了嘛,那么得到的都是Date类型的,对它们你可以用getTime()这个函数取得它们的long值,你不是要大于14岁的嘛,所以用现在得Date的时间减去你从数据库中取得的时间Date值(long值),不就是得到两者的差值了嘛,最后除365×24×60×60×1000是为了得到年数,如果大于14,就是大于14岁的了
回复
aredline 2004-08-25
不明白,懵了
回复
Bluecatr 2004-08-25
当然是日期比较那,用当前的日期减去生日的时间的long(getTime())值,然后再除365×24×60×60×1000,如果大于14,就是你要选择的对象了.....
回复
aredline 2004-08-25
字符型,存成的格式可以是:2002-02-02

字符串类型转换成日期类型为:
String str="2000-11-23";
SimpleDateFormat tepDate = new SimpleDateFormat("yyyy-mm-dd");

Date tepDate = tepDate.parse(str);
日期类型转换成字符串类型为:
java.util.Date now=new java.util.Date();
String strOut = "";
java.text.SimpleDateFormat dft = new java.text.SimpleDateFormat("yyyy-MM-dd");
strOut = dft.format(now);

执行语句是:
ResultSet rs=sqlbean1.executeQuery(sql);
关键是sql怎么写:
String sql="select * from xjff where"+((Date)formatter.parse(borndate))+"<(date-5113)
where后面到底怎么写:我上面这样写肯定是不对的
是字符串比较还是日期比较,郁闷!
14*365+3=14年(3为差的闰年天数)
回复
ybsoft 2004-08-25
字符串也可以进行比较的SUBSTR(borndate,4)取前4位得到年,然后和1990做比较就可以了
回复
craks 2004-08-25
用dataformat把字符转成日期,然后再比较好了,如果是对齐的格式的话,那就切字符窜了,转换成数字,然后比较了
回复
boykent 2004-08-25
为什么“不想改成日期型”呀,呵呵
回复
amortal 2004-08-25
oracle里面有todate的函数,一般数据库应该都可以转的吧,
利用数据库里面提供的日期计算应该是最方便得吧
回复
加载更多回复
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-08-25 02:47
社区公告
暂无公告