将时间戳转换为日期数据类型

Convert timestamp to date data type

SELECT to_date(to_char(SYSTIMESTAMP, 'MM/DD/YYYY'), 'MM/DD/YYYY') FROM DUAL;

==> 04-MAR-16

谁能解释为什么这个 select 语句不会导致“03/04/2016”?

如何编写我的 selection 以使其作为日期类型产生这种结果?我也试过

SELECT to_date(to_char(trunc(SYSTIMESTAMP), 'MM/DD/YYYY'), 'MM/DD/YYYY') FROM DUAL

结果相同

您正在将日期时间转换为字符串并返回日期。出于输出目的,您的系统默认日期格式为 DD-MMM-YY;这是 Oracle 中日期的正常默认值。

重要的是要了解 date/time 类型的内部数据结构与它们的呈现方式无关。因此,如果您想要其他格式,请使用 to_char().

转换为字符串

如果要更改默认格式,请查看 NLS_DATE_FORMAT。文档是 here.

当查询返回并显示日期时,显然需要以某种方式对其进行格式化。日期类型值的格式化方式不是由查询决定的,而是由执行查询并显示结果的工具决定的。

对于 SQL 开发人员,您可以按如下方式设置该格式:

  1. 选择菜单工具 > 首选项。
  2. 在“首选项”对话框中,select 左侧面板中的数据库 > NLS。
  3. 从 NLS 参数列表中,输入 "MM/DD/YYYY"
  4. 保存并关闭

另见 this 问题。

请注意,要将时间戳转换为日期,您只需截断它即可:trunc(SYSTIMESTAMP)。不需要将其转换为字符串然后再转换回日期。