按日期加入表格,使用脏日期字段
Join tables on dates, with dirty date field
在 AWS Athena 中,我尝试使用日期在数据库中加入两个 table,但其中一个 table (table2) 不干净,并包含不是日期的值,如下所示。
| table2.date |
| ---- |
|6/02/2021|
|9/02/2021|
|1431 BEL & 1628 BEL."|
|15/02/2021|
|and failed to ....|
|18/02/2021|
|19/02/2021|
我无法对清理此 table 产生任何影响。
我当前的查询是:
SELECT *
FROM table1
LEFT JOIN table2
ON table1.operation_date = cast(date_parse(table2."date",'%d/%m/%Y') as date)
LIMIT 10;
我试过使用 regex_like(col, '[a-z]')
,但这仍然留下数字值,而不是日期值。
如何让查询忽略非日期值?
您可以用 try
函数包装转换表达式,如果转换失败,它将解析为 NULL
。
select
try(date_parse(col, '%d/%m/%Y'))
from(values
('6/02/2021'),
('9/02/2021'),
('1431 BEL & 1628 BEL.'),
('15/02/2021'),
('and failed to ....'),
('18/02/2021'),
('19/02/2021')
) as t(col)
#
_col0
1
2021-02-06 00:00:00.000
2
2021-02-09 00:00:00.000
3
4
2021-02-15 00:00:00.000
5
6
2021-02-18 00:00:00.000
7
2021-02-19 00:00:00.000
在 AWS Athena 中,我尝试使用日期在数据库中加入两个 table,但其中一个 table (table2) 不干净,并包含不是日期的值,如下所示。
| table2.date |
| ---- |
|6/02/2021|
|9/02/2021|
|1431 BEL & 1628 BEL."|
|15/02/2021|
|and failed to ....|
|18/02/2021|
|19/02/2021|
我无法对清理此 table 产生任何影响。
我当前的查询是:
SELECT *
FROM table1
LEFT JOIN table2
ON table1.operation_date = cast(date_parse(table2."date",'%d/%m/%Y') as date)
LIMIT 10;
我试过使用 regex_like(col, '[a-z]')
,但这仍然留下数字值,而不是日期值。
如何让查询忽略非日期值?
您可以用 try
函数包装转换表达式,如果转换失败,它将解析为 NULL
。
select
try(date_parse(col, '%d/%m/%Y'))
from(values
('6/02/2021'),
('9/02/2021'),
('1431 BEL & 1628 BEL.'),
('15/02/2021'),
('and failed to ....'),
('18/02/2021'),
('19/02/2021')
) as t(col)
# | _col0 |
---|---|
1 | 2021-02-06 00:00:00.000 |
2 | 2021-02-09 00:00:00.000 |
3 | |
4 | 2021-02-15 00:00:00.000 |
5 | |
6 | 2021-02-18 00:00:00.000 |
7 | 2021-02-19 00:00:00.000 |