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
具有相同的结果。
答案 0 :(得分:3)
当查询返回日期并显示时,显然需要以某种方式格式化。格式化日期类型值的方式不是由查询确定,而是由执行查询并显示结果的工具确定。
对于SQL开发人员,您可以按如下方式设置该格式:
另见this问题。
请注意,要将时间戳转换为日期,您只需截断它:trunc(SYSTIMESTAMP)
。将其转换为字符串然后再转换为日期是不必要的。
答案 1 :(得分:0)
您正在将日期时间转换为字符串并返回日期。为了输出目的,您的系统默认日期格式为DD-MMM-YY;这是Oracle中日期的正常默认值。
重要的是要了解日期/时间类型的内部数据结构与它们的呈现方式无关。因此,如果您想要其他格式,请使用to_char()
转换为字符串。
如果您想更改默认格式,请查看NLS_DATE_FORMAT
。文档为here。