はじめに:なぜ「Date is not recognized」が出るの?
Snowflakeを使っていて、こんなエラーに出くわしたことはありませんか?
Date '2026/05/18' is not recognized
「えっ、ふつうの日付なのに何がダメなの?」と戸惑う方も多いはずです。実はこのエラー、文字列を日付として読み込もうとしたときに、Snowflakeが想定するフォーマットと一致していないことが原因で発生します。今回はその仕組みと、TO_DATE/TRY_TO_DATE の正しい使い分けまで、初心者向けにフレンドリーに解説していきますね。

エラーの正体:Snowflakeが受け付けるデフォルトの日付形式
Snowflakeはデフォルトで、ISO 8601形式(例: 2026-05-18)を「日付」として認識します。一方で 2026/05/18 や 18-MAY-2026 のような書き方はそのままでは受け付けてくれません。
たとえば次のSQLを実行すると、冒頭のエラーが返ってきます。
SELECT TO_DATE('2026/05/18');
-- Date '2026/05/18' is not recognized
これは「Snowflakeが悪い」のではなく、「どんなフォーマットの文字列か教えてあげていない」のが原因です。日本のシステムでよく使われる YYYY/MM/DD や YYYYMMDD は、明示的に指定しないと読めません。
解決策その1:TO_DATEにフォーマットを指定する
もっともシンプルな解決法は、TO_DATE の第2引数にフォーマット文字列を渡してあげることです。
-- スラッシュ区切り
SELECT TO_DATE('2026/05/18', 'YYYY/MM/DD');
-- 8桁数字
SELECT TO_DATE('20260518', 'YYYYMMDD');
-- 日本語表記混じり
SELECT TO_DATE('2026年05月18日', 'YYYY"年"MM"月"DD"日"');
フォーマット指定子は YYYY(4桁年)、MM(2桁月)、DD(2桁日)が基本です。詳しい一覧はSnowflake公式の変換関数ドキュメントを参照してください。
解決策その2:DATE_INPUT_FORMATをセッションで設定する
「毎回フォーマットを書くのは面倒…」という場合は、セッションパラメータ DATE_INPUT_FORMAT を変えてしまう方法もあります。
ALTER SESSION SET DATE_INPUT_FORMAT = 'YYYY/MM/DD';
SELECT TO_DATE('2026/05/18'); -- これでもOKに!
デフォルト値は AUTO で、Snowflakeが推測してくれる代表的な形式に対応します。決まった形式の文字列を大量に読み込む場合に便利です。
TO_DATE と TRY_TO_DATE の使い分け
ここからが本題。Snowflakeには TO_DATE と TRY_TO_DATE という似た関数が2つあります。違いはとてもシンプルです。
- TO_DATE: 変換に失敗したらエラーで止まる
- TRY_TO_DATE: 変換に失敗したらNULLを返して処理を続ける

実際の挙動を比べてみましょう。
-- 失敗するとクエリ全体がエラーで止まる
SELECT TO_DATE('not-a-date', 'YYYY-MM-DD');
-- → エラー!
-- 失敗しても NULL を返してくれる
SELECT TRY_TO_DATE('not-a-date', 'YYYY-MM-DD');
-- → NULL
使い分けの目安
- マスタデータなど、絶対に変換できるはずのデータ →
TO_DATE(壊れたデータに早く気づける) - ログやCSVなど、汚れたデータが混ざる可能性がある →
TRY_TO_DATE(NULLに逃がしてクレンジング)
たとえば外部から取り込んだCSVをETLする場合は、TRY_TO_DATE でいったんNULL化し、後から WHERE date_col IS NULL で不正レコードを抽出する流れが定番です。
よくあるハマりどころ
- タイムスタンプ付き文字列(例:
2026-05-18 10:30:00)をTO_DATEに渡すと失敗します。TO_TIMESTAMPを使ってから::DATEでキャストしましょう。 - 2桁年(例:
26/05/18)はYY指定にすればOKですが、世紀の解釈に注意してください。 - カラム名の大文字小文字でハマったときは「Invalid identifier」エラーの記事も参考になります。
まとめ
「Date ‘…’ is not recognized」エラーは、フォーマット指定がないか、指定とデータが噛み合っていないのが原因のほぼ全てです。
- デフォルトはISO形式(
YYYY-MM-DD)のみ受け付ける - それ以外は
TO_DATE(値, 'フォーマット')で明示する - 頻繁に使うフォーマットは
DATE_INPUT_FORMATで固定できる - 失敗を許容したいときは
TRY_TO_DATEでNULL化する
これさえ押さえれば、日付エラーで何時間も悩むことはなくなるはずです。エラーメッセージは怖がらず、まず「フォーマットを教えてあげる」を試してみてくださいね!
参考リンク
- TO_DATE 関数 – Snowflake公式ドキュメント
- TRY_TO_DATE 関数 – Snowflake公式ドキュメント
- DATE_INPUT_FORMAT パラメータ – Snowflake公式ドキュメント
- 日付と時刻の入力/出力形式 – Snowflake公式ドキュメント
関連記事
- Snowflake「Invalid identifier」エラーの原因と解決法|大文字小文字とダブルクォートの落とし穴 – 識別子まわりのエラーをまとめてチェック
- Object does not exist or not authorized エラーの正体|Snowflakeでテーブルが見えない時の最短デバッグ – テーブルが見つからない時の対処法
- Insufficient privileges to operate on の原因と解決手順 – 権限エラーの読み解き方


