Amazon redshift 在红移中将文本转换为日期时接收错误

Amazon redshift 在红移中将文本转换为日期时接收错误,amazon-redshift,Amazon Redshift,我正在运行一个查询,Redshift在“SQL错误[500310][57014]:Amazon无效操作:将文本转换为日期时出错 但是,当我删除联接表或从WHERE子句中删除转换时,它不再抛出错误。因此,我怀疑发生了其他事情,这个错误是误导性的 我看过数据,没有一个日期看起来奇怪或超出范围 以下是引发错误的查询: SELECT m.member_id, t.tracker_id, DATE(ma.yyyymmdd) AS tracked_date, DATE(ma

我正在运行一个查询,Redshift在“SQL错误[500310][57014]:Amazon无效操作:将文本转换为日期时出错

但是,当我删除联接表或从WHERE子句中删除转换时,它不再抛出错误。因此,我怀疑发生了其他事情,这个错误是误导性的

我看过数据,没有一个日期看起来奇怪或超出范围

以下是引发错误的查询:

SELECT   m.member_id,
     t.tracker_id,
     DATE(ma.yyyymmdd) AS tracked_date,
     DATE(ma.updated_date) AS updated_date
FROM import_genesis.member_activities ma
INNER JOIN master."member" m
    ON ma.memberid = m.member_legacy_id
INNER JOIN master.action_activity aa
    ON ma.activity_type = aa.activity_type
INNER JOIN master.tracker t
    ON t.action_id = aa.action_id
WHERE DATE(ma.yyyymmdd) > DATE(DATEADD(DAY, -14, GETDATE()))
AND DATE(ma.yyyymmdd) <= GETDATE();
SELECT  DATE(ma.yyyymmdd) AS tracked_date,
        DATE(ma.updated_date) AS updated_date
FROM import_genesis.member_activities ma
WHERE DATE(ma.yyyymmdd) > DATE(DATEADD(DAY, -14, GETDATE()))
AND DATE(ma.yyyymmdd) <= GETDATE();

关于可能出现的错误或任何潜在的解决方法,您有什么想法吗?

请注意,GETDATE()函数实际上返回的是时间戳数据类型,而不是日期。我想你应该改用current_date函数。我还建议在将文本转换为数据/时间戳时使用隐式掩码。尝试使用to_DATE(ma.yyyymmdd,'yyyyymmdd')(或本例中正确的掩码)代替DATE(ma.yyyymmdd)。如果比较两种不同的数据类型,总会有潜在的问题。执行查询时,数据库在比较之前决定将转换为哪个数据类型。SQL中的小更改可能会影响此行为。感谢您的响应。我以为TO_DATE只是为了将varchar转换为DATE。然而,尝试这样做让我找到了答案:date列中的一个条目确实有一个无效的日期。我不想偏离主题,但当我遇到这样的查询错误时,我如何准确地确定是哪个条目导致了问题?因为您没有描述列,所以我假设ma.yyymmdd是text/varchar。检查日期是否有效有点复杂。我将开始检查特定的子字符串是否在预期值之间的范围内。例如:左('20190101',4)介于'1900'和'2100'之间
SELECT  m.member_id,
        t.tracker_id,
        DATE(ma.yyyymmdd) AS tracked_date,
        DATE(ma.updated_date) AS updated_date
FROM import_genesis.member_activities ma
INNER JOIN master."member" m
    ON ma.memberid = m.member_legacy_id
INNER JOIN master.action_activity aa
    ON ma.activity_type = aa.activity_type
INNER JOIN master.tracker t
    ON t.action_id = aa.action_id;