在Big Query中使用Date Diff

时间:2017-05-05 10:48:16

标签: google-bigquery

我使用标准SQL在BQ中有以下语句。我被要求转换为Legacy以使用第三方应用程序..我正在努力使用Date_Diff功能。任何帮助将不胜感激

1 - 选择DATE_ADD(日期([Client_StartDate]),间隔 - DATE_DIFF(DATE([Client_StartDate]),current_date,year)year)作为AnniversaryDate

2 - 选择DATE_DIFF(current_date,DATE([Client_StartDate]),month)作为MonthsSinceStart

1 个答案:

答案 0 :(得分:2)

旧版SQL:

对于今年开始日期的周年纪念日:

tf.summary.histogram

自开始日期起的月数:

#legacySQL
SELECT
  DATE_ADD(
    Client_StartDate,
    YEAR(CURRENT_TIMESTAMP()) - YEAR(Client_StartDate),
    "YEAR") AS AnniversaryDate
FROM (SELECT TIMESTAMP('2015-02-23') AS Client_StartDate);

标准SQL:

对于今年开始日期的周年纪念日(假定为时间戳):

#legacySQL
SELECT
  (YEAR(CURRENT_TIMESTAMP()) - YEAR(Client_StartDate)) * 12 +
    (MONTH(CURRENT_TIMESTAMP()) - MONTH(Client_StartDate)) AS MonthsSinceStart
FROM (SELECT TIMESTAMP('2015-02-23') AS Client_StartDate);

自开始日期起的月数(假设为时间戳):

#standardSQL
SELECT
  DATE(EXTRACT(YEAR FROM CURRENT_DATE()),
       EXTRACT(MONTH FROM Client_StartDate),
       EXTRACT(DAY FROM Client_StartDate)) AS AnniversaryDate
FROM (SELECT TIMESTAMP '2015-02-23' AS Client_StartDate);

遗留SQL查询的一个原因是它们在TIMESTAMP而不是DATE类型上运行(DATE在遗留SQL中具有有限的功能)。 DATE是一个很好的类型,可以在标准SQL中使用,因为它是一个逻辑时间点而不是物理时间点,并且不与时区绑定。您可以在data types reference

中详细了解相关信息