有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从指定日期的12点开始获取记录?

嘿,我在运行sql server&;在where子句中,对于不同的日期范围,我有6个条件。dateadd函数工作得很好,对我来说可能太好了。我丢失了记录,因为在数据库中,如果记录的时间戳早于我当前运行的时间,则不会被捕获。我可以指定我的日期范围(27-33)天,并说从今天上午12点开始,而不是当前时间吗

即:2014年3月11日的记录符合27天的范围。但它实际上在DB内部

2014年3月11日4:00:00这是凌晨4点以后,不会被检索到

+ "where "
+ "(b.new_SwWarrantyEndDate >= dateadd(day,27,(CONVERT (date, SYSUTCDATETIME()))) AND "
+ "b.new_SwWarrantyEndDate <= dateadd(day,33,(CONVERT (date, SYSUTCDATETIME())))) OR "

共 (2) 个答案

  1. # 1 楼答案

    从12:00AAM开始,换句话说,时间是重要的,你所关心的就是只要日期是一样的。 在本例中,您可以将field和getdate()函数强制转换为as date,然后比较sql server中的值,例如

    WHERE CAST(Field AS DATE) = CAST(GETDATE() AS DATE)
    
  2. # 2 楼答案

    您可以在java端计算timstamps

        Calendar c = Calendar.getInstance();
        c.set(Calendar.MILLISECOND, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.HOUR_OF_DAY, 12);
        c.add(Calendar.DATE, 27);
        Timestamp ts1 = new Timestamp(c.getTimeInMillis());
        c.add(Calendar.DATE, 6);
        Timestamp ts2 = new Timestamp(c.getTimeInMillis());
    

    然后将它们用作PreparedStatement中的参数

    ...b.new_SwWarrantyEndDate between ? and ?
    
    ps.setTimestamp(1, ts1);
    ps.setTimestamp(2, ts2);