我使用标准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
答案 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。
中详细了解相关信息