我试图获取具体的日期格式ⅅ 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)。
非常感谢任何帮助。
谢谢。
答案 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;