【发布时间】:2021-06-28 17:50:49
【问题描述】:
我有很多行“日期字符串”,这些是机器学习算法识别为日期的字符串。我现在需要将它们转换为 Oracle Dates,这是可能的。我也有兴趣获得其他日期功能,例如“星期几”、“月份”、“年份”、“月份”。
这里是我正在处理的 10k 行数据样本(您会看到字符串中有很多可变性): https://pastebin.com/FUNUynjQ
我在想我可以尝试一堆不同的模式,像这样:
select to_date('YYYY-MM-DD') from date_strings
但是我收到了这个错误:
ORA-01858:在需要数字的地方发现了一个非数字字符
所以我想我可能需要构建一些庞大的CASE 语句或TRY CATCH 函数。这里有关于最佳方法的任何想法吗?谢谢!
【问题讨论】:
-
您的字符串没有一致的数据类型。
2000-2006、last may和the coming year都是带固定端点的区间;wednesday是星期几,既不是间隔也不是日期;the mid 70s是一个非常模糊的范围,在 60 年后它会混淆你在谈论哪个 70 年代;Mar 16, 2021是一个日期。您不能将它们全部转换为 Oracle 日期,因为它们不是所有日期。 -
@MT0 你是对的,这些不会全部转换,这就是我添加“如果可能”语句的原因。你也是对的,在如何将这些解释为日期方面存在很多歧义,我只是在寻找一些关于如何解决问题的想法,即使我只能真正解析其中的 20%,这是一场胜利。
-
我开始认为我可能只需要一堆正则表达式来循环遍历每个值,看看它是否解析为日期、月份等。
-
这是您想出的 anything 的致命缺陷:考虑“日期”字符串 '05/04/12'。几月几号?什么日子?年份是什么?你怎么知道?当然可以编写一个算法将其转换为 oracle DATE 而不会出错,但是您将无法知道它是否正确。
-
@EdStevens 你是对的,你不知道它应该是 MM/DD 还是 DD/MM,但没关系。将这些字符串解析为日期(即使它们有点错误)比根本不解析要好得多,所以我仍然需要一种方法来做到这一点,即使源数据很乱。
标签: string oracle date parsing plsql