如何在 Redshift 中查找不能转换为日期的值?
How to find values that can't be cast as date in Redshift?
我有一大堆数据。我尝试解析一列以提取作为日期的子字符串并将其转换为日期 - date(<substring here>)
。我收到错误 ERROR: Error converting text to date
,但我不知道实际问题是什么。如何找到导致问题的值?类似于 try_cast,但这在 Redshift 中不起作用。我不确定我是否可以使用正则表达式,因为我不知道我要查找的内容的格式。
您的问题很宽泛,与您要解决的任务相比不是很具体,因此很难提供正确答案
- 您可以使用 pattern matching
比如说,你在TableA
中有以下数据
id
dt
1
2020-08-20
2
2021-08-20
3
2021-08-21
4
2021-08-2000
5
asdfghjkl
6
08-01-2021
7
06/07/2021
通过模式匹配,您可以找到具有正确日期的所有行
select id from TableA
where dt similar to '\d{4}-\d{2}-\d{2}'
or dt similar to '\d{2}-\d{2}-\d{4}'
or dt similar to '\d{2}/\d{2}/\d{4}'
您现在需要做的就是反转此查询以找到对立面
select id, dt from TableA
where id not in (
select id from logs.sot
where dt similar to '\d{4}-\d{2}-\d{2}'
or dt similar to '\d{2}-\d{2}-\d{4}'
or dt similar to '\d{2}/\d{2}/\d{4}'
)
这会给你结果
id
dt
5
asdfghjkl
4
2021-08-2000
如果这不起作用,您可以尝试按日期列排序并验证头部和尾部 - 错误值通常存在于此处
如果可能,请在 Redshift 外部进行处理。通常在将数据放入数据库之前注意数据清理是一种很好的做法。我相信一个简单的 python(或任何其他语言)脚本就能完成工作
我有一大堆数据。我尝试解析一列以提取作为日期的子字符串并将其转换为日期 - date(<substring here>)
。我收到错误 ERROR: Error converting text to date
,但我不知道实际问题是什么。如何找到导致问题的值?类似于 try_cast,但这在 Redshift 中不起作用。我不确定我是否可以使用正则表达式,因为我不知道我要查找的内容的格式。
您的问题很宽泛,与您要解决的任务相比不是很具体,因此很难提供正确答案
- 您可以使用 pattern matching
比如说,你在TableA
id | dt |
---|---|
1 | 2020-08-20 |
2 | 2021-08-20 |
3 | 2021-08-21 |
4 | 2021-08-2000 |
5 | asdfghjkl |
6 | 08-01-2021 |
7 | 06/07/2021 |
通过模式匹配,您可以找到具有正确日期的所有行
select id from TableA
where dt similar to '\d{4}-\d{2}-\d{2}'
or dt similar to '\d{2}-\d{2}-\d{4}'
or dt similar to '\d{2}/\d{2}/\d{4}'
您现在需要做的就是反转此查询以找到对立面
select id, dt from TableA
where id not in (
select id from logs.sot
where dt similar to '\d{4}-\d{2}-\d{2}'
or dt similar to '\d{2}-\d{2}-\d{4}'
or dt similar to '\d{2}/\d{2}/\d{4}'
)
这会给你结果
id | dt |
---|---|
5 | asdfghjkl |
4 | 2021-08-2000 |
如果这不起作用,您可以尝试按日期列排序并验证头部和尾部 - 错误值通常存在于此处
如果可能,请在 Redshift 外部进行处理。通常在将数据放入数据库之前注意数据清理是一种很好的做法。我相信一个简单的 python(或任何其他语言)脚本就能完成工作