BigQuery SQL半月日期范围



我的报告具有需要自动化的查询,以便返回的数据范围是半月(1-15)(16--月末)

因此,如果报告是在月1日运行的,则日期范围是前16-上月末的月份。

如果报告在15日运行,则该范围是本月1-15。

我打算在两者之间使用。但是我需要能够动态生成date_from和date_to range的日期。

可能会这样(也许使用当前日期和一些计算)?

非常感谢。

eric

要生成一系列日期,您可以使用GENERATE_DATE_ARRAY函数。例如,

SELECT d
FROM UNNEST(GENERATE_DATE_ARRAY(
              CURRENT_DATE(),
              DATE_ADD(CURRENT_DATE(), INTERVAL 14 DAY))) AS d;

请注意,此功能仅在标准SQL中可用。

要生成从本月的第一个到15日的范围,您可以使用DATE_TRUNC函数:

SELECT d
FROM UNNEST(GENERATE_DATE_ARRAY(
              DATE_TRUNC(CURRENT_DATE(), MONTH),
              DATE_ADD(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 15 DAY))) AS d;

您应该能够通过数据库中的功能轻松完成此操作,例如(if(),date_sub()和date_format()。这是使用您的示例中可以使用的示例:

SELECT * 
FROM 
mytable 
WHERE 
mydate >= IF( DAY(NOW()) >= 15, 
DATE_FORMAT(NOW(), '%Y-%m-01'), 
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH)), '%Y-%m-16')
&& mydate <= IF( DAY(NOW()) >= 15,
DATE_FORMAT(NOW(), '%Y-%m-15'),
LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH)) )

*此示例是mysql

DECLARE @FIRST_DAY_OF_CURRENT_MONTH DATE
DECLARE @FIRST_DAY_OF_PRIOR_MONTH DATE
DECLARE @LAST_DAY_OF_PRIOR_MONTH DATE
SET @FIRST_DAY_OF_CURRENT_MONTH =DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0)
SET @FIRST_DAY_OF_PRIOR_MONTH =DATEADD(MM,-1,@FIRST_DAY_OF_CURRENT_MONTH)
SET @LAST_DAY_OF_PRIOR_MONTH =DATEADD(MM,DATEDIFF(MM,0,GETDATE()),-1)
IF (DATEPART(DD,GETDATE()) =15)
BEGIN
SELECT * FROM TABLE 
WHERE DATE_COLUMN BETWEEN @FIRST_DAY_OF_CURRENT_MONTH AND 
DATEADD(DD,14,@FIRST_DAY_OF_CURRENT_MONTH)
END
IF(DATEPART(DD,GETDATE()) = 1)
SELECT * FROM TABLE 
WHERE DATE_COLUMN BETWEEN DATEADD(DD,15,@FIRST_DAY_OF_PRIOR_MONTH) AND @LAST_DAY_OF_PRIOR_MONTH
END

最新更新