Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何格式化SQL DATETIME以将其压缩到给定日期并检索一条记录?_Java_Sql_Format - Fatal编程技术网

Java 如何格式化SQL 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

Hi必须检索数据库的一条记录,该记录应尽可能接近我的参数(日期(YYYY-MM)),请记住,数据库(sql server)中的列是DATETIME,因此我需要对其进行格式化,以便进行比较,以下是我一直在做的事情:

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的原因
可能永远都是真的。