上个月的最后一天 - BigQuery

时间:2016-07-05 15:50:09

标签: sql tsql google-bigquery

我尝试选择时间戳字段recdate的日期值最多并包含该月最后一天完成日期的行。例如,由于这是2016年7月,我希望所有行的日期值都达到并包含31-06-2016。这曾经在T-SQL中运行良好,我使用以下内容并将其分配给@today并在我的WHERE中查看:

DECLARE @today DATETIME SELECT @today = CONVERT(VARCHAR(25),DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())-0,0)));

我在BigQuery中苦苦挣扎,我无法获得DATEDIFF或GETDATE工作,想知道是否有人对此有过想法?

祝福

戴夫

6 个答案:

答案 0 :(得分:4)

以下为例

SELECT DATE(DATE_ADD(CURRENT_DATE() , -DAY(CURRENT_DATE()), "DAY"))
顺便说一下,6月有30天:o) - Priestley's "The Thirty-First of June"

除外

答案 1 :(得分:3)

适用于标准SQL

SELECT DATE_ADD(CURRENT_DATE(),INTERVAL -EXTRACT(DAY FROM CURRENT_DATE())DAY)

答案 2 :(得分:1)

标准SQL的另一种方式。

当月第一天:

SELECT DATE_TRUNC(CURRENT_DATE(), MONTH)

上个月的最后一天(当前第一天减去1):

SELECT DATE_SUB(DATE_TRUNC(CURRENT_DATE(), MONTH), INTERVAL 1 DAY)

下个月的第一天:

SELECT DATE_TRUNC(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH)

本月的最后一天(下个月的第一天减去1):

SELECT DATE_SUB(DATE_TRUNC(DATE_ADD(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH), INTERVAL 1 DAY)

答案 3 :(得分:0)

DATE_ADD( CURRENT_DATE(), INTERVAL -EXTRACT( DAY FROM CURRENT_DATE()) DAY)

这是Google BigQuery的正确语法。

答案 4 :(得分:-1)

从SQL 2012开始,有一个EOMONTH函数:

https://msdn.microsoft.com/en-us/library/hh213020.aspx

用法:

DECLARE @date VARCHAR(255) = '07/01/2016';  
SELECT EOMONTH ( @date ) AS Result;  
GO  

将于2016年7月31日返回

DECLARE @date VARCHAR(255) = GetDate() ;  -- To Get End of month for Current Month
SELECT EOMONTH ( @date ) AS Result;  
GO  

将于2016年7月31日返回

我的坏..我没有意识到OP正在寻找上个月的最后一天

但这应该有效:

DECLARE @date Datetime = '12/31/2017' -- Input Date. Has to be Datetime NOT varchar. If incomming date is a varchar it needs to be converted to Datetime.
Select DAY( @date ) -- Returns 31
SELECT @date - DAY( @date ) as LastDayOfPrevMonth

输出:

LastDayOfPrevMonth

2017-11-30 00:00:00.000

我已经尝试过大多数Edge案例,比如闰日,任何一个月的第一天/最后一天等。

答案 5 :(得分:-1)

适用于任何版本的SQL Server

SELECT convert(varchar(10),
    DATEADD(mm, -1, 
        DATEADD(s,-1,
            DATEADD(mm, 
                DATEDIFF(m,0,getdate())+1
            ,0)
        )
    ), 103) AS [LastMonthEnd]