アプリ版:「スタンプのみでお礼する」機能のリリースについて

Tableau Desktopの計算フィールドでタイトルに記載した日付取得を行いたいです。
例)初期値:教えて!goo20230731
最終値:2023-07-31

以下はイメージです。
1.8桁の数字を文字列として取得(Aとする)
REGEXP_EXTRACT([文字フィールド],'\d{8}')
2.取得した文字列を日付型に変換可能なら日付型にし、それ以外は'NULL'とする
IF ISNULL(ISDATE([A])) THEN 'NULL'
ELSE
DATEPARSE('yyyyDDmm',[A])
END

ISDATEが非集計では使用できませんとエラーが出てしまい困っています。
8桁の数字が20230031のような場合、0月という日付がないため変換エラーになるので日付変換可能か判定するロジックが必要になります。

よろしくお願いいたします。

質問者からの補足コメント

  • ご回答ありがとうございます。
    ISNULLを使用した場合も変換エラーは起きてしまいます。
    例として「20210031」の場合はNULL判定ではないので、変換が行われ結果としてエラーが返ってしまいます。このような値を判定して除外したいのですが難しいですね、、、
    ご丁寧なご説明ありがとうございます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/08/03 18:29

A 回答 (1件)

Tableau Desktopで、ISDATE関数を非集計フィールドで使用することはできませんが、代わりにDATEPARSE関数のエラーハンドリングを使用して、日付変換可能かどうかを判定することができます。

具体的な手順は以下の通りです。

8桁の数字を文字列として取得 (Aとする)
scss
REGEXP_EXTRACT([文字フィールド], '\d{8}')
取得した文字列を日付型に変換可能かどうかを判定

java
IF ISNULL(DATEPARSE('yyyyMMdd', [A])) THEN 'NULL'
ELSE DATEPARSE('yyyyMMdd', [A])
END

上記の式では、DATEPARSE関数を使用して取得した文字列を日付型に変換しようとします。もし変換が成功した場合はその日付を返し、変換ができなかった場合は'NULL'を返します。

このように、ISDATE関数を使用せずにDATEPARSE関数のエラーハンドリングを活用することで、日付変換可能かどうかを判定することができます。なお、DATEPARSE関数では変換エラーが発生した場合にNULLが返るため、'NULL'を返す部分は不要です。ただし、上記の式で使用する日付のフォーマットは注意してください。例えば、'yyyyMMdd'のように、正確なフォーマットを指定する必要があります。ご希望に添えるか分かりませんがよろしくお願いします。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!