2017-05-05 36 views
1

私は以下の文をBQで標準SQLを使用しています。私はレガシーに変換するよう依頼されているサードパーティ製のアプリケーションで使用する..私はDate_Diff関数に苦しんでいます。任意の助けいただければ幸いBig Queryで日付差分を使用する

1 - 選択DATE_DIFF( - AnniversaryDate

2のよう - DATE_ADD(DATE_DIFF(DATE([Client_StartDate])、CURRENT_DATE、年)年の日付([Client_StartDate])、間隔)を選択CURRENT_DATE、DATE([Client_StartDate])、月)MonthsSinceStart

+0

標準SQLをサポートしていないサードパーティのアプリケーションとは何ですか?あなたは '#standardSQL'コメントをアプリケーションのクエリの先頭に使用できますか? –

+0

私は考えていません。私はCTOの言葉通りにやっています。私はそのアプリが他のものにレガシーを使用していることが多いと思うので、現時点では実行不可能な2つの間で切り替える –

+0

あなたは両方を使うことはできませんが...他の多くのBigQueryユーザーは、従来のSQLクエリーと標準SQLクエリーを使用して、標準SQLに移行します。それはもちろんあなた/あなたのCTOに任されていますが、私はレガシーSQLの癖を学ぶために時間を費やすのではなく、標準のSQLを使うことを提案します。 –

答えて

2

レガシー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で詳細を読むことができます。

+0

パーフェクト、よろしく –

関連する問題