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