redshift 错误:无效的 Dateatime 日期字符串:上下文:输入长度 57 超出日期时间范围

问题描述 投票:0回答:1

我在完成 SQL 查询时遇到问题,我认为这与某些时间戳单元格为空/NULL 相关

这是查询:

SELECT 
    interaction_id,
    resolved_by_new2,
    (TO_TIMESTAMP(SPLIT_PART(group_assigned_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS') - TO_TIMESTAMP(SPLIT_PART(created_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS')) AS time_using_the_bot,
    (TO_TIMESTAMP(SPLIT_PART(agent_assigned_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS') - TO_TIMESTAMP(SPLIT_PART(group_assigned_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS')) AS q_waiting_time,
    (TO_TIMESTAMP(SPLIT_PART(first_response_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS') - TO_TIMESTAMP(SPLIT_PART(agent_assigned_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS')) AS agent_first_response,
    (TO_TIMESTAMP(SPLIT_PART(resolution_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS') - TO_TIMESTAMP(SPLIT_PART(agent_assigned_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS')) AS handling_time,
    (TO_TIMESTAMP(SPLIT_PART(resolution_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS') - TO_TIMESTAMP(SPLIT_PART(created_timestamp3, ',', 1), 'YYYY-MM-DD HH24:MI:SS')) AS resolution_from_creation
  FROM 
(
SELECT
    interaction_id,
    LISTAGG(resolved_by_new) AS resolved_by_new2,  
    COALESCE(NULLIF(LISTAGG(created_timestamp2), 0), '0') AS created_timestamp3,
    COALESCE(NULLIF(LISTAGG(group_assigned_timestamp2), 0), '0') AS group_assigned_timestamp3,
    COALESCE(NULLIF(LISTAGG(agent_assigned_timestamp2), 0), '0') AS agent_assigned_timestamp3,
    COALESCE(NULLIF(LISTAGG(first_response_timestamp2), 0), '0') AS first_response_timestamp3,
    LISTAGG(avg_response_time_secs) AS avg_response_time_secs2,
    COALESCE(NULLIF(LISTAGG(resolution_timestamp2), 0), '0') AS resolution_timestamp3
FROM ...

红移误差:

“无效的日期时间日期字符串:上下文:输入长度 57 超出日期时间范围”

这是数据中的 SS

我尝试使用 NULLIF 将空值替换为 0,但没有成功

sql datetime amazon-redshift
1个回答
0
投票

这里发生了很多事情。首先,LISTAGG() 连接组内列的所有字符串。我怀疑这没有达到您的预期,但会假设最好的。要了解其作用,您需要共享查询中的分组内容,但您将该信息排除在查询之外。

我认为错误消息中可以提供有关问题所在的线索。 “输入长度 57 超出日期时间范围”。我怀疑您传递给 TO_TIMESTAMP() 的字符串格式不正确。如果 LISTAGG() 将多个时间戳字符串粉碎在一起,则很容易发生这种情况。

我会查看您内部 SELECT 的结果,并查看您放入 TO_TIMESTAMP() 中的字符串的长度。我希望您会看到您的内部查询没有生成您期望的字符串。

© www.soinside.com 2019 - 2024. All rights reserved.