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

时间:2016-03-04 19:08:34

标签: sql oracle oracle11g to-date systimestamp

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

具有相同的结果。

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:0)

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

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

如果您想更改默认格式,请查看NLS_DATE_FORMAT。文档为here