BigQuery SQL: Заданный строковый ввод. как подтвердить, что это действительная дата

# #sql #google-bigquery

#sql #google-bigquery

Вопрос:

Я работаю над фильтрованием записей, с которыми не связаны действительные даты. Ожидаемое-это строка формата yyyymmddhhmmss . Как я могу проверить, что строка на самом деле является действительной датой? Например, входная строка может быть: 202101....## (недопустимые литералы)

Ответ №1:

Вы можете использовать safe.parse_datetime('%Y%m%d%H%M%S', col_string) as col_datetime — если col_string представляет допустимую дату и время — он выведет эту допустимую дату и время, в противном случае — null, как в приведенном ниже примере

 with your_table as (  select '20211215031521' col_string union all   select '20211215031521Y' union all   select '202112150H1521'  ) select col_string,   safe.parse_datetime('%Y%m%d%H%M%S', col_string) as col_datetime from your_table   

с выходом

введите описание изображения здесь

Ответ №2:

Хотел бы фильтр, как …

 WHERE SAFE_CAST (datestring AS DATE) IS NOT NULL  

послужит вашей цели?