我正在尝试在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))
获取所有上周的数据,但我如何在上周的随机日做到这一点?
谢谢!
答案 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并舍入得到整数。