Sql 摘录;“星期一”;从一个日期开始作为一个日期

Sql 摘录;“星期一”;从一个日期开始作为一个日期,sql,oracle,tableau-api,Sql,Oracle,Tableau Api,我使用此代码从日期中提取月份和年份: to_char(to_date(i.CREATION_DATE, 'DD-MON-YYYY'), 'Mon-YY') "Month" 它可以根据需要工作,但是,当我将报告提取到.csv时,返回的值(例如,Jan-2021)被格式化为文本。然后,当我将报告加载到Tableau时,会产生许多问题,因为Tableau不承认“1-2021”是日期,而是文本 我尝试了许多解决方案,包括提取,或者将to_日期放在to_字符之前(这导致“ORA-01

我使用此代码从日期中提取月份和年份:

to_char(to_date(i.CREATION_DATE, 'DD-MON-YYYY'), 'Mon-YY') "Month"
它可以根据需要工作,但是,当我将报告提取到.csv时,返回的值(例如,Jan-2021)被格式化为文本。然后,当我将报告加载到Tableau时,会产生许多问题,因为Tableau不承认“1-2021”是日期,而是文本

我尝试了许多解决方案,包括提取,或者将to_日期放在to_字符之前(这导致“ORA-01858:在预期数字的位置发现了非数字字符”错误)


拜托,我该怎么做?谢谢。

在放入Tableau之前,无需将其转换为文本。留个日子吧。让自己熟悉,你可以很简单地解决这个问题


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

这是Tableau的问题,我想说,Oracle不必对它做任何处理。在Oracle中,
date
是一种二进制格式,没有格式,总是有表示组件的字节,世纪年、月、日、时、分、秒;您不能有一个
Mon Year
值并将其称为日期。这听起来不像是甲骨文的问题,但听起来像是一个表格问题,因此你需要管理转换;您可能希望在查询中保留一个实际日期,并将其前端格式化为字符串。您可以
trunc(creation_date,'MM')
获得月的第一天,如果这简化了前端的工作。(您应该将该值存储为实际日期;您的
to_date()
表明它是一个字符串,但您可能只是在进行不必要且危险的隐式转换。)谢谢Alex Poole、Littlefoot和MTO。我没有意识到这一点。这完全有道理。我会在桌面上处理这个问题。再次感谢您。Tableau非常乐意将日期导入为日期,并允许您以多种方式对其进行格式化。您不需要在源代码中将部分日期提取为文本,因为这限制了Tableau格式化日期的能力,并可能阻止它将值识别为日期。