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

时间:2014-02-12 12:30:29

标签: java sql-server dateadd

嘿我正在运行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 "

4 个答案:

答案 0 :(得分:0)

您可以使用DATE_FORMAT和BETWEEN关键字检索日期范围内的数据:

DATE_FORMAT('“+ date1 +”','%Y-%m-%d')之间的

DATE_FORMAT(b.new_SwWarrantyEndDate,'%Y-%m-%d')  和DATE_FORMAT('“+ date2 +”','%Y-%m-%d')

它可能对你有帮助。

答案 1 :(得分:0)

您可以在java端计算时间戳

    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());

然后将它们用作准备语句

中的参数
...b.new_SwWarrantyEndDate between ? and ?

ps.setTimestamp(1, ts1);
ps.setTimestamp(2, ts2);

答案 2 :(得分:0)

您可以将过滤器(WHERE子句)划分为两个:

首先,您按日期获取所有数据:

CAST(b.new_SwWarrantyEndDate as date) BETWEEN dateadd(day,27,(CONVERT (date, SYSUTCDATETIME()))) AND dateadd(day,33,(CONVERT (date, SYSUTCDATETIME())))

然后是时间

CAST(b.new_SwWarrantyEndDate as time) BETWEEN '12:00:00' and '23:59:59'

答案 3 :(得分:0)

从12:00AAM开始换句话说,时间是相关的,只要日期相同,您只关心它。 在这种情况下,您可以将字段和getdate()函数转换为日期,然后比较sql server中的值,如

WHERE CAST(Field AS DATE) = CAST(GETDATE() AS DATE)