2013-10-28 171 views
1

我想从oracle数据库中选择一个日期字段,使用 select to_date(trndt, 'yyyymmdd') from cf20gldt,但系统显示错误。从oracle数据库中选择日期格式ddmmyyyy

+4

'to_date()'将字符串转换为* date *。您正在寻找'to_char()'将日期转换为指定格式的字符串(btw:** always **包含实际的错误信息,我们无法从这里看到您的屏幕) –

回答

1

Reference

更改它作为to_char

SELECT TO_CHAR(trndt, 'yyyymmdd') FROM cf20gldt; 

如果您trndt那么你必须改变它作为

SELECT TO_CHAR(TO_DATE(trndt), 'yyyymmdd') FROM cf20gldt; 

例如显示系统日期列不是日期类型

SELECT TO_CHAR(sysdate,'yyyymmdd') FROM dual; 
+2

您的回答是正确的很远,但是你不应该在没有指定格式的情况下使用to_date。忽略格式使您的select语句依赖于当前的区域设置,这些设置可能与日期字符串中的格式匹配或不匹配。 –

+0

@Naveen:当我在查询中需要使用“select *”,并且需要日期为DD/MM/YYYY格式 – user3782114

+0

@ user3782114时,该怎么做,要做到这一点,您可以使用以下命令:'ALTER SESSION SET NLS_DATE_FORMAT ='DD/MM/YYYY';'。但不要使用'SELECT *'。 –

1

To_date是将列转换为日期格式。如果您trndt没有日期已经然后输入如下:

select to_char(to_date(trndt), 'yyyymmdd') from cf20gldt; 

或者,如果你的列trndate已经是日期格式,那么以下用途: -

select to_char(trndt, 'yyyymmdd') from cf20gldt; 
+3

正确,但不要在未指定格式的情况下使用to_date。看到我对纳文答案的相应评论。 –

+0

我写了to_date而没有任何格式,以便它采用数据库格式,然后使用to_char获取所需格式(此处为yyyymmdd)。 – user2342436

+0

是的,我明白这一点。但是,如果日期存储在一个字符串中,它将以某种已知的格式存储。命名格式而不是dbms猜测。英国用户可以将他/她的设置设为DD/MM/YYYY和他的美国同事MM/DD/YYYY。他们这样做,因为他们希望以习惯(美国或英国)的方式显示日期。这决不会影响数据库中存储为varchar2的日期的解释。 –

0

你可以使用:

SELECT to_char(sysdate, 'yyyy-mm-dd') date, 
     to_char(sysdate, 'hh24:mm:ss') hr 
     FROM DUAL; 

按字段类型更改sysdate日期。