如何将日期格式更改为' dd-Mon-yy'在Oracle中

时间:2017-01-20 20:26:06

标签: oracle oracle11g plsqldeveloper

我试图获取具体的日期格式ⅅ Mon-YY'

我的表格有一个日期字段(birth_dt),其默认格式为' dd / mm / yyyy'

我不希望结果是文本(即不想使用to_char())因为结果需要导出到Excel电子表格,并且某些排序需要由业务基于日期字段。

我试图使用:

SELECT to_date(to_char(t.birth_dt,'dd-Mon-yy'), 'dd-Mon-yy') FROM  TABLE t 

但它仍然提供与前面描述的相同的日期格式(dd / mm / yyyy)。

非常感谢任何帮助。

谢谢。

3 个答案:

答案 0 :(得分:1)

您似乎对#include <stdio.h> #include <string.h> typedef struct { char title[60]; char author[20]; int year_published; int pages; }Book; int main (void) { FILE *fp; Book b1,b2; Book book; strcpy( b1.title, "Title Book 1" ); strcpy( b1.author, "Book 1 Author" ); b1.year_published = 1991; b1.pages = 123; strcpy( b2.title, "Title Book 2" ); strcpy( b2.author, "Book 2 Author" ); b2.year_published = 1992; b2.pages = 456; fp=fopen("./books.dat", "w+"); if( fp ) { fwrite( &b1, sizeof( b1 ), 1, fp ); fwrite( &b2, sizeof( b2 ), 1, fp ); fclose( fp ); printf( "Wrote file\n" ); printf( "Now reopen the file and read the structs\n" ); fp = fopen( "./books.dat", "r" ); if( fp ) { fread( &book, sizeof(book), 1, fp ); printf("%s %s %d %d\n", book.title, book.author, book.year_published, book.pages); fread( &book, sizeof(book), 1, fp ); printf("%s %s %d %d\n", book.title, book.author, book.year_published, book.pages); fclose( fp ); } else { printf(" Failed to open created data file.\n"); } } else { printf( "Failed to open file\n" ); } return 0; } 数据类型感到困惑。 DATE没有&#34;格式&#34; (如果您真的想知道日期是如何在Oracle内部存储的,那么您可以使用DATE函数 - 您将看到内部格式与格式模型无关)。 DUMP()和所有变体仅用于表示日期AS STRINGS,而不是其他任何内容。

'dd/mm/yyyy'数据类型中的日期导出到Excel。无论您在Excel中需要什么样的格式,都可以在那里完成。无论您需要做什么订购,都要按照日期进行 - 没有&#34;格式模型&#34;正确的订购需要。

关于你的困惑:当你DATE一个约会时(但不是你导出它的时候!)它必须转换成一个字符串,因为你只能&#34;看到&#34;字符。 Oracle根据您当前的NLS_DATE_FORMAT参数转换日期 - 但是当您SELECT日期字段或导出到Excel时,只要您在{{1}中导出,就不会使用此参数(并且不相关)数据类型(如你所愿)。

答案 1 :(得分:0)

to_date(to_char(t.birth_dt,'dd-Mon-yy'), 'dd-Mon-yy')没有任何意义。

您正在将日期转换为字符串,然后又将其转换为日期。

Oracle中的日期没有任何格式。格式适用于它们。 根据您的NLS参数,日期以工具的格式显示。您可以在工具的NLS设置中设置它们。

答案 2 :(得分:0)

您正在寻找的答案可以通过使用NLS_SESSION参数来完成。希望插图有所帮助。

注意:此设置仅对当前会话进行重新设置。关闭会话后,设置也将恢复。

SELECT sysdate+ level FROM dual CONNECT BY LEVEL < 10;

--Now check the NLS_DATE_FORMAT in NLS_SESSION_PARAMEERS table

SELECT * FROM nls_session_parameters;

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-Mon-YY';_

--Now check the NLS_DATE_FORMAT in NLS_SESSION_PARAMEERS table

SELECT sysdate+ level FROM dual CONNECT BY LEVEL < 10;