我尝试选择时间戳字段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工作,想知道是否有人对此有过想法?
祝福
戴夫
答案 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
输出:
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]