用于过滤特定日期时间格式的 where 语句 sql bigquery

where statement to filter specific datetime format sql bigquery

我有一个逐行输出数据的查询,对于每条记录,我从 last_modified_date 列中获取一个值,该值是该列中的最新日期,但不晚于 date 列的值。我将新值保存在列 custom_last_modified_date 中。 我的数据如下所示:

id           date           last_modified_date
A           03/01/22          2022-03-02 22:44
A           03/01/22          2022-02-01 05:14
A           03/01/01          2022-02-28 07:49
B           03/02/22          2022-03-20 07:49
B           03/02/22          2022-03-01 04:46
B           03/02/01          2022-02-28 09:24

输出为:

id           date        custom_last_modified_date
A           03/01/22          02/28/22
A           03/01/22          02/28/22
A           03/01/01          02/28/22
B           03/02/22          03/01/22
B           03/02/22          03/01/22
B           03/02/01          03/01/22

代码如下:

SELECT 
id, 
date,
MAX(
        IF(
            date(
                string(
                    TIMESTAMP(
                        DATETIME(
                            parse_datetime('%Y-%m-%d %H:%M', last_modified_date)
                        ),
                        'America/New_York'
                    )
                )
            ) <= date,
            date(
                string(
                    TIMESTAMP(
                        DATETIME(
                            parse_datetime('%Y-%m-%d %H:%M', last_modified_date)
                        ),
                        'America/New_York'
                    )
                )
            ),
            null
        )
    ) OVER (PARTITION BY date, id) as custom_last_modified_date
FROM `my_table`

样本上一切正常,但由于数据不是很干净,有时 last_modified_date 中的值如下所示:"2021-0-3 05:50" 然后错误消息是:Failed to parse 有没有办法在 where 子句中过滤掉正确的日期格式,或者在同一查询中排除错误的值? 谢谢。

您可以使用 SAFE 前缀忽略解析器错误,然后您可以过滤 null 行:

-- Returns null if last_modified_date not match the expected pattern
SAFE.parse_datetime('%Y-%m-%d %H:%M', last_modified_date)

来自文档:

If you begin a function with the SAFE. prefix, it will return NULL instead of an error.

[...]

BigQuery supports the use of the SAFE. prefix with most scalar functions that can raise errors, including STRING functions, math functions, DATE functions, DATETIME functions, TIMESTAMP functions, and JSON functions.

更多信息:https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-reference#safe_prefix