这似乎是Excel 基于 1900 年的 dates 内部表示。假设您的解释是正确的,您可以通过一些操作将其转换为正常日期:
-- CTE for sample values
with your_table (num) as (
select *
from table(sys.odcinumberlist(118339, 118346, 118347, 118348, 118351, 119013, 119035,
119049, 119051, 118339, 118353, 119019, 119028, 119029, 119031))
)
-- actual query
select num,
date '1899-12-31'
+ floor(num/1000) * interval '1' year
+ mod(num, 1000) * interval '1' day as converted
from your_table;
NUM CONVERTED
---------- ----------
118339 2018-12-05
118346 2018-12-12
118347 2018-12-13
118348 2018-12-14
118351 2018-12-17
119013 2019-01-13
119035 2019-02-04
119049 2019-02-18
119051 2019-02-20
118339 2018-12-05
118353 2018-12-19
119019 2019-01-19
119028 2019-01-28
119029 2019-01-29
119031 2019-01-31
这将前三位数字 - 获得floor(num/1000)
- 视为从 1900 年偏移的年数。这些数字乘以单个年份间隔值,得到 118 或 199 年。然后它将最后三位数字 - 从mod(num, 1000)
- 视为该年的天数,乘以单日间隔。然后将两者都添加到固定日期 1899-12-31。(您可以改用 1900-01-01 但最后必须减去一天...)