Datetime oracle 10g将带有时间戳的日期列转换为dd mon yyyy格式

Datetime oracle 10g将带有时间戳的日期列转换为dd mon yyyy格式,datetime,oracle10g,typeconverter,Datetime,Oracle10g,Typeconverter,您好,我正在尝试将定义为日期的列转换为格式为DD-MON-YYYY的日期,但无法使其工作 select to_date(to_char (DESIGN_COMPLETION_DATE,'DD-MON-YYYY'),'DD-MON-YYYY') as Assessment_Completion_Date from nbi_dates 也试过 Select to_date(DESIGN_COMPLETION_DATE,'DD-MON-YYYY') as Assessmen

您好,我正在尝试将定义为日期的列转换为格式为DD-MON-YYYY的日期,但无法使其工作

 select 
   to_date(to_char
   (DESIGN_COMPLETION_DATE,'DD-MON-YYYY'),'DD-MON-YYYY') as Assessment_Completion_Date
    from nbi_dates
也试过

 Select to_date(DESIGN_COMPLETION_DATE,'DD-MON-YYYY') as Assessment_Completion_Date
    from nbi_dates
有效的是,但我不能对它做任何计算,因为它是char

 Select to_char(DESIGN_COMPLETION_DATE,'DD-MON-YYYY') as Assessment_Completion_Date
    from nbi_dates
谢谢

或者简单地说(如果您希望date对象用于计算,但不用于渲染)


如果您有一个包含时间部分但只对实际日期部分感兴趣的
日期
,则可以使用以下功能:

select trunc(design_completion_date) as assessment_completion_date from nbi_dates
使用
sysdate
的差异示例;请注意,
trunc
'd版本上的时间已设置为午夜:

SQL> alter session set nls_date_format = 'DD/MM/YYYY HH24:MI:SS';

Session altered.

SQL> select sysdate, trunc(sysdate) from dual;

SYSDATE             TRUNC(SYSDATE)
------------------- -------------------
11/04/2013 15:14:31 11/04/2013 00:00:00

日期
没有固有格式
DD-MON-YYYY
是一种用于显示日期或将其转换为字符串表示形式的格式掩码,通常仅用于显示。您的第三个选项适用于此目的,但如果您想对结果进行任何进一步的日期计算,则不适用。

date
值没有任何格式。客户机决定如何将数据表示为字符串,而数据库不决定。“无法进行任何计算”部分是否意味着您有一个带有时间组件的日期,并且只想使用日期部分,而放弃时间?(我不知道标题是否暗示了这一点)。这是OP首先显示的内容,没有任何效果-您正在转换为字符串并返回到日期,那么有什么意义呢?to_date()在这个场景中是正确的,但是它接受字符串参数。我同意你的观点,Alex日期就是日期,但是一些提取数据的用户不理解这一点。他们想要“dd-mon-yyyy”格式的日期,并且能够做一些事情,比如评估_-completion _-date>q1等等。我确实希望在某些情况下,杀人是合法的,但事实并非如此stuck@Varun-如果用户希望能够使用
'11-Apr-2013'
q1
字符串值来实现这一点,则必须将其值转换为日期。如果他们不按照
…>到目前为止('2013年4月11日,'DD-Mon-YYYY')
那么你就有点卡住了。即使你能让他们的客户端设置有
NLS\u DATE\u FORMAT='DD-Mon-yyyyy'
,他们至少要做到
到日期('2013年4月11日')
,我们知道隐式掩码仍然是有害的。是否可以使用字符串日期的函数?我将值作为视图传递,请不要介意,但由于预算限制,我是一名BA,正在进行开发工作,因此我不确定是否可以在视图中使用函数。@Varun-不确定将值作为视图传递是什么意思。我认为,如果您更新问题,说明您正在对数据做什么,以及您希望如何调用/显示/比较数据,将会很有帮助。基本上你想要实现什么,因为它不清楚,我在猜测(显然是错误的!)。
select trunc(design_completion_date) as assessment_completion_date from nbi_dates
SQL> alter session set nls_date_format = 'DD/MM/YYYY HH24:MI:SS';

Session altered.

SQL> select sysdate, trunc(sysdate) from dual;

SYSDATE             TRUNC(SYSDATE)
------------------- -------------------
11/04/2013 15:14:31 11/04/2013 00:00:00