Zel*_*elB 1 sql datetime sql-date-functions sqldatetime amazon-redshift
我想查询一些工作日之间的数据,如下:
该查询将在每周一自动运行,因此我想为其设置一个动态条件,以便它自动选择那一天,而不依赖于将来运行的任何一天。
例如,如果今天是 2018 年 1 月 8 日星期一:
我想在 WHERE 子句中设置该条件。现在我以这种方式查询它,使用恒定的日期,例如上周的数据:
SELECT *
FROM thisTable
WHERE Date(operation_date) BETWEEN '2018-06-10' AND '2018-06-16'
Run Code Online (Sandbox Code Playgroud)
数据库管理系统:亚马逊红移
DATE_TRUNC 函数是您的朋友。它被截断为星期一。
SELECT
CURRENT_DATE AS today,
DATE_TRUNC('week', CURRENT_DATE) as most_recent_monday,
DATE_TRUNC('week', CURRENT_DATE) - 2 AS most_recent_saturday,
DATE_TRUNC('week', CURRENT_DATE) - 8 AS sunday_before_most_recent_saturday
Run Code Online (Sandbox Code Playgroud)
返回:
2018-06-21 | 2018-06-18 00:00:00 | 2018-06-16 00:00:00 | 2018-06-10 00:00:00
Run Code Online (Sandbox Code Playgroud)
请注意,它将日期视为当天开始时的午夜。所以,你真的不想查询周日到周六。您实际上想要查询周日到周日(这实际上意味着周日开始的午夜到下周日开始的午夜)。这假设您的源日期是时间戳。
如果您的源日期只是一个日期,那么您可能需要使用星期日到星期六。
如果您想查询“上周”中的所有内容(如果您的定义是周日到周日),并假设有时间戳,请使用:
SELECT *
FROM thisTable
WHERE operation_date BETWEEN
-- Most recent Monday minus 8 days = Two Sundays ago
DATE_TRUNC('week', CURRENT_DATE) - 8 AND
-- Most recent Monday minus 1 day = Most recent Sunday
DATE_TRUNC('week', CURRENT_DATE) - 1
Run Code Online (Sandbox Code Playgroud)
(好吧,除非你已经是周日了,但那是你的问题!)
如果日期是date,则必须稍微调整一下。