【发布时间】:2021-04-25 17:06:08
【问题描述】:
我正在使用此代码从日期中提取月份和年份:
to_char(to_date(i.CREATION_DATE, 'DD-MON-YYYY'), 'Mon-YY') "Month"
它按要求工作,但是,当我将报告提取到 .csv 时,返回的值(例如 Jan-2021)被格式化为文本。然后,当我将报告加载到 Tableau 时,它会产生许多问题,因为 Tableau 不会将“2021 年 1 月”识别为日期,而是文本。
我尝试了许多解决方案,包括 EXTRACT,或者将 to_date 放在 to_char 之前(这会导致“ORA-01858:在预期有数字的地方发现了一个非数字字符”错误)。
请问,我该如何进行这项工作?谢谢。
【问题讨论】:
-
这是一个 Tableau 问题,我想说,Oracle 不必对它做任何事情。
-
在 Oracle 中,
DATE是一种没有格式的二进制格式,并且 ALWAYS 具有代表 Century、Year-of-Century、Month、Day、Hour 组件的字节, 分和秒;您不能拥有Mon-Year值并将其称为日期。这听起来不像是 Oracle 问题,但听起来像 Tableau 问题,您需要在最后管理转换。 -
同意 Littlefoot 和 MTO;您可能希望在查询中留下一个实际日期,并让前端将其格式化为字符串。你可以
trunc(creation_date, 'MM')获得当月的第一天,如果这样可以简化前端的事情。 (您应该将该值存储为真实日期;您的to_date()表明它是一个字符串,但您可能只是在进行不必要且危险的隐式转换。) -
感谢 Alex Poole、Littlefoot 和 MTO。我没有意识到这一点。这完全有道理。然后,我将在 Tableau 中进行管理。再次感谢您。
-
Tableau 非常乐意将日期导入为日期,并允许您以多种方式对其进行格式化。您不需要将日期的部分内容提取为源中的文本,因为这会限制 Tableau 格式化日期的能力,并可能会阻止它将值识别为日期。
标签: sql oracle tableau-api