1
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

结果相同。

4

2 回答 2

3

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

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

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

另请参阅问题。

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

于 2016-03-04T19:28:59.433 回答
0

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

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

如果要更改默认格式,请查看NLS_DATE_FORMAT. 文档在这里

于 2016-03-04T19:24:13.567 回答