【问题标题】:Extract "Mon-YY" from a date as a Date从日期中提取“Mon-YY”作为日期
【发布时间】: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


【解决方案1】:

在导入 Tableau 之前无需将其转换为文本。把它作为一个日期。熟悉Tableau date functions and date formats,就可以很简单的解决这个问题。

如果它是 Tableau 中的日期,并且您想显示为 MMM-YY,只需将该字段的默认格式设置为自定义格式 mmm-yy

【讨论】:

    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多