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

Oracle 如何将日期格式更改为';dd Mon-yy';在甲骨文中,oracle,oracle11g,plsqldeveloper,Oracle,Oracle11g,Plsqldeveloper,我正在尝试获取特定的日期格式“DD 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)

我正在尝试获取特定的日期格式“DD 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)

任何帮助都将不胜感激

谢谢。

截止日期(出生日期,'dd-Mon-yy'),'dd-Mon-yy')
没有任何意义

您正在将日期转换为字符串,然后再转换回日期

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

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

您正在将日期转换为字符串,然后再转换回日期

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

您似乎对日期数据类型感到困惑
DATE
没有“格式”(如果您确实想了解Oracle内部如何存储日期,可以使用
DUMP()
函数-您将看到内部格式与格式模型无关)。
'dd/mm/yyyy'
和所有变体仅用于将日期表示为字符串,而不用于其他任何内容

DATE
数据类型中的日期导出到Excel。您可以在Excel中进行任何格式设置。无论您需要做什么排序,都要按日期进行—正确的排序不需要“格式模型”


关于您的混淆:当您选择日期时(而不是导出日期时!),必须将其转换为字符串,因为您只能“查看”字符。Oracle根据您当前的NLS_date_格式参数转换日期-但无论是在日期字段中按
排序时,还是在导出到Excel时,只要以
date
数据类型(如您所应)导出,都不会使用此参数(且与此无关)。

您似乎对
date
数据类型感到困惑
DATE
没有“格式”(如果您确实想了解Oracle内部如何存储日期,可以使用
DUMP()
函数-您将看到内部格式与格式模型无关)。
'dd/mm/yyyy'
和所有变体仅用于将日期表示为字符串,而不用于其他任何内容

DATE
数据类型中的日期导出到Excel。您可以在Excel中进行任何格式设置。无论您需要做什么排序,都要按日期进行—正确的排序不需要“格式模型”


关于您的混淆:当您选择日期时(而不是导出日期时!),必须将其转换为字符串,因为您只能“查看”字符。Oracle根据您当前的NLS_date_格式参数转换日期-但无论是在日期字段中按
排序,还是在导出到Excel时,只要以
日期
数据类型导出(如您所应),都不会使用此参数(且与此无关).

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

注意:此设置仅适用于当前会话。关闭会话后,设置也将恢复

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;
按级别<10从双连接中选择sysdate+级别;
--现在检查NLS_会话参数表中的NLS_日期格式
从nls_会话_参数中选择*;
ALTER SESSION SET NLS_DATE_FORMAT='DD Mon YY'_
--现在检查NLS_会话参数表中的NLS_日期格式
按级别<10从双连接中选择sysdate+级别;

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

注意:此设置仅适用于当前会话。关闭会话后,设置也将恢复

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;
按级别<10从双连接中选择sysdate+级别;
--现在检查NLS_会话参数表中的NLS_日期格式
从nls_会话_参数中选择*;
ALTER SESSION SET NLS_DATE_FORMAT='DD Mon YY'_
--现在检查NLS_会话参数表中的NLS_日期格式
按级别<10从双连接中选择sysdate+级别;

您所说的“日期字段的默认格式为…”是什么意思?
birth\u dt
真的是日期数据类型,还是格式为
'dd/mm/yyyy'
的VARCHAR2?不可能两者都有!如果您不知道,请使用
描述t
。您所说的“日期字段的默认格式为…”是什么意思?
birth\u dt
真的是日期数据类型,还是格式为
'dd/mm/yyyy'
的VARCHAR2?不可能两者都有!如果您不知道,请使用
描述t
@mathguy删除reference@mathguy删除引用