Java 如何格式化SQL DATETIME以将其压缩到给定日期并检索一条记录?
Hi必须检索数据库的一条记录,该记录应尽可能接近我的参数(日期(YYYY-MM)),请记住,数据库(sql server)中的列是DATETIME,因此我需要对其进行格式化,以便进行比较,以下是我一直在做的事情:Java 如何格式化SQL DATETIME以将其压缩到给定日期并检索一条记录?,java,sql,format,Java,Sql,Format,Hi必须检索数据库的一条记录,该记录应尽可能接近我的参数(日期(YYYY-MM)),请记住,数据库(sql server)中的列是DATETIME,因此我需要对其进行格式化,以便进行比较,以下是我一直在做的事情: public Document findByDate(String date) throws GeneralException{ Document docs = new Document(); String d1 = date; String delimiter
public Document findByDate(String date) throws GeneralException{
Document docs = new Document();
String d1 = date;
String delimiter = "-";
String[]temp = d1.split(delimiter);
try{
String sql = "SELECT TOP(1) * FROM Document WHERE issueDate >= '" + temp[1]+ temp[0] +"' AND issuedate < '"+ temp[1]+ temp[0] +"' ORDER BY issueDate DESC ";
ResultSet rs = this.executeQuery(sql);
while(rs.next()){
docs = (Document) this.build(rs);
}
if(docs != null){
return docs;
} else {
return docs = null;
}
} catch (SQLException ex){
throw new GeneralException(ex);
}
}
公共文档findByDate(字符串日期)引发GeneralException{
单据单据=新单据();
字符串d1=日期;
字符串分隔符=“-”;
字符串[]temp=d1.split(分隔符);
试一试{
String sql=“从issueDate>=”“+temp[1]+temp[0]+””和issueDate<”“+temp[1]+temp[0]+”“ORDER BY issueDate DESC”的文档中选择顶部(1)*”;
ResultSet rs=this.executeQuery(sql);
while(rs.next()){
docs=(Document)this.build(rs);
}
如果(文档!=null){
退货单据;
}否则{
返回单据=空;
}
}catch(SQLException-ex){
抛出新的泛型异常(ex);
}
}
非常感谢您不应该使用字符串连接将参数传递给查询。这很容易出错,依赖于数据库和语言环境,使代码容易受到SQL注入攻击。相反,使用日期参数并将其作为java.sql.date传递,而不是作为字符串传递:
String sql =
"SELECT TOP(1) * FROM Document WHERE issueDate >= ? AND issuedate < ? ORDER BY issueDate DESC";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setDate(1, date);
stmt.setDate(2, date);
ResultSet rs = stmt.executeQuery();
stringsql=
“从issueDate>=?和issueDate<?按issueDate描述订购的文档中选择顶部(1)*”;
PreparedStatement stmt=connection.prepareStatement(sql);
stmt.setDate(1,日期);
stmt.设置日期(2,日期);
ResultSet rs=stmt.executeQuery();
也就是说,我看不出你的查询是如何工作的。数据库中的日期如何既小于或等于给定日期,又大于同一日期?也许你应该用你的日期作为下限,用你的日期+1个月作为上限?试试这个查询
SELECT TOP(1) * FROM Document WHERE convert(date,issueDate) >= ' datevalue ' AND convert(date,issuedate) < ' datevalue ' ORDER BY issueDate DESC
从转换(日期,发行日期)>=“datevalue”和转换(日期,发行日期)的文档中选择顶部(1)*<“datevalue”按发行日期描述的顺序
所以你想要的是同一个月或上个月的最新记录,当然我们必须记住,12月之前的一个月是去年
你可能会在比较月份和年份方面搞得一团糟,但如果你不是在该月底通过YYYY-MM,而是
Select Top(1) * from Documents Where IssueDate <= ? Order By IssueDate Desc
从发布日期为YYYY-MM的文档中选择顶部(1)*?你说的最近是什么意思。接近同月初还是月底?那么它是否必须在2012年10月1日的同一个月比2012年9月15日更接近2010年9月底,我每个月只有一条记录,所以如果不是实际月份,它应该是前一条记录。我每个月只有一条记录,所以如果不是实际月份,它应该是前一条记录。这没有解释a>=b和a的原因
可能永远都是真的。