Oracle数据库如何将连续数字转换为日期

mlmc2os5  于 2023-11-17  发布在  Oracle
关注(0)|答案(1)|浏览(146)

下面的查询输出一个日期的连续数字,例如数字2415021:

SELECT
  TO_NUMBER(TO_CHAR(TO_DATE('01.01.2101', 'DD.MM.YYYY'), 'j'))
FROM DUAL

字符串
我怎么能把它转换回一个日期与所需的格式?我找不到任何这.
我已经尝试了不同的变化fo_date,但没有运行。
请注意,这不是一个数字,如2023/01/01,我想转换为'2023/01/01',这是一个连续的数字。

sg3maiej

sg3maiej1#

'j'日期格式元素是:
儒略日;自公元前4712年1月1日起的天数。用J指定的数字必须是整数。
您可以转换回具有相同元素的日期:

SELECT
  TO_DATE(TO_CHAR(2488435), 'j')
FROM DUAL

字符串
| TO_DATE(TO_CHAR(2488435),'J ')|
| --|
| 2001年1月1日|
这给了你一个数据类型为DATE的值。它有一个内部的二进制表示,没有任何固有的人类可读格式。你的客户端通常决定如何显示内部表示,通常使用NLS设置,例如:

alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'
SELECT
  TO_DATE(TO_CHAR(2488435), 'j')
FROM DUAL

的数据
| TO_DATE(TO_CHAR(2488435),'J ')|
| --|
| 2019 -01-01 00:00:00|
如果你想要一个特定格式的 string 值,那么显式地转换它:

SELECT
  TO_CHAR(TO_DATE(TO_CHAR(2488435), 'j'), 'DD.MM.YYYY')
FROM DUAL


| TO_CHAR(TO_DATE(TO_CHAR(2488435),'J '),'DD.MM. YYYY')|
| --|
| 01.01.2101|
或者对于与代码中的日期不匹配的示例编号:

SELECT
  TO_CHAR(TO_DATE(TO_CHAR(2415021), 'j'), 'DD.MM.YYYY')
FROM DUAL


| TO_CHAR(TO_DATE(TO_CHAR(2415021),'J '),'DD.MM. YYYY')|
| --|
| 1900年1月1日|
fiddle
但是不要存储或传递格式化为字符串或数字的日期;将它们存储和使用为日期,并且仅在需要字符串的情况下将其格式化为最终显示或外部调用(例如,在JSON API调用中以ISO格式进行格式化等)。

相关问题