SELECT to_date(to_char(SYSTIMESTAMP, 'MM/DD/YYYY'), 'MM/DD/YYYY') FROM DUAL;
==> 04-MAR-16
谁能解释为什么这个选择语句没有导致"03/04/2016"?
如何编写我的选择,以便它确实导致它作为日期类型?我也试过
SELECT to_date(to_char(trunc(SYSTIMESTAMP), 'MM/DD/YYYY'), 'MM/DD/YYYY') FROM DUAL
结果相同。
当查询返回并显示日期时,显然需要以某种方式设置其格式。日期类型值的格式设置方式不是由查询决定的,而是由执行查询并显示结果的工具决定的。
对于 SQL 开发人员,您可以按如下方式设置该格式:
- 选择菜单工具>首选项。
- 在"首选项"对话框中,从左侧面板中选择"数据库> NLS"。
- 从 NLS 参数列表中,输入"月/日/年"
- 保存并关闭
另请参阅此问题。
请注意,要将时间戳转换为日期,您只需截断它:trunc(SYSTIMESTAMP)
.没有必要将其转换为字符串,然后再转换回日期。
您正在将日期时间转换为字符串并转换回日期。 出于输出目的,系统默认日期格式为 DD-MMM-YY;这是 Oracle 中日期的正常默认值。
请务必了解,日期/时间类型的内部数据结构与它们的呈现方式无关。 因此,如果您希望它采用其他格式,请使用 to_char()
转换为字符串。
如果要更改默认格式,请查看 NLS_DATE_FORMAT
。 文档在这里。