レガシーSQLのように:記念日のため
開始日の今年:
#legacySQL
SELECT
DATE_ADD(
Client_StartDate,
YEAR(CURRENT_TIMESTAMP()) - YEAR(Client_StartDate),
"YEAR") AS AnniversaryDate
FROM (SELECT TIMESTAMP('2015-02-23') AS Client_StartDate);
#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);
標準SQL::開始日から数ヶ月
#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);
の場合:記念日のため
開始日の今年(タイムスタンプであると仮定)開始日からの月数(タイムスタンプと仮定):
#standardSQL
SELECT
DATE_DIFF(
CURRENT_DATE(),
EXTRACT(DATE FROM Client_StartDate), MONTH) AS MonthsSinceStart
FROM (SELECT TIMESTAMP '2015-02-23' AS Client_StartDate);
レガシーSQLクエリの1つは、DATE型ではなくTIMESTAMPで動作することです(DATEは従来のSQLで機能が制限されています)。 DATEは、物理的ではなく時間的に論理的なポイントであり、タイムゾーンに結び付けられていないため、標準SQLで動作する優れたタイプです。 data types referenceで詳細を読むことができます。
標準SQLをサポートしていないサードパーティのアプリケーションとは何ですか?あなたは '#standardSQL'コメントをアプリケーションのクエリの先頭に使用できますか? –
私は考えていません。私はCTOの言葉通りにやっています。私はそのアプリが他のものにレガシーを使用していることが多いと思うので、現時点では実行不可能な2つの間で切り替える –
あなたは両方を使うことはできませんが...他の多くのBigQueryユーザーは、従来のSQLクエリーと標準SQLクエリーを使用して、標準SQLに移行します。それはもちろんあなた/あなたのCTOに任されていますが、私はレガシーSQLの癖を学ぶために時間を費やすのではなく、標準のSQLを使うことを提案します。 –