从Access SQL中选择上周的随机日期

时间:2015-04-28 20:55:27

标签: sql ms-access

我正在尝试在Access中构建一个如下所示的查询:

SELECT * 
FROM my_table
WHERE date_column BETWEEN X AND Y

我希望X在上周六上午6点随机,第二天早上6点在Y.

我知道我能做到:

WHERE date_column Between DateAdd('ww',DateDiff('ww',7,Date()),0)-6 And DateAdd('ww',DateDiff('ww',7,Date()),6)-6))

获取所有上周的数据,但我如何在上周的随机日做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:1)

DECLARE @x AS DATETIME
DECLARE @y AS DATETIME
DECLARE @randomday AS INT

SET @randomday = ABS(Checksum(NewID()) %6) 
SET @x = LEFT(CONVERT(nvarchar, DATEADD(DAY, -@randomday, GETDATE()), 120), 11) + N'06:00:00'
SET @y = DateAdd(day,1, @x)

SELECT * 
FROM my_table
WHERE date_column BETWEEN @x AND @y

答案 1 :(得分:0)

在Access查询中,您可以使用VBA功能,因此这应该可以满足您的需求:DateAdd('ww',DateDiff('ww',7,Date()),0)-Round(6*Rnd())

与您的解决方案的不同之处在于,不是-6天而是将其减少为Round(6 * Rnd())。 Rnd返回数字> = 0且< 1。比你需要将它乘以max gap并舍入得到整数。