将时间戳转换为日期数据类型
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 开发人员,您可以按如下方式设置该格式:
- 选择菜单工具 > 首选项。
- 在“首选项”对话框中,select 左侧面板中的数据库 > NLS。
- 从 NLS 参数列表中,输入 "MM/DD/YYYY"
- 保存并关闭
另见 this 问题。
请注意,要将时间戳转换为日期,您只需截断它即可:trunc(SYSTIMESTAMP)
。不需要将其转换为字符串然后再转换回日期。
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 开发人员,您可以按如下方式设置该格式:
- 选择菜单工具 > 首选项。
- 在“首选项”对话框中,select 左侧面板中的数据库 > NLS。
- 从 NLS 参数列表中,输入 "MM/DD/YYYY"
- 保存并关闭
另见 this 问题。
请注意,要将时间戳转换为日期,您只需截断它即可:trunc(SYSTIMESTAMP)
。不需要将其转换为字符串然后再转换回日期。