PervasiveSQL数据库特殊日期格式识别及转换方法咨询
解决PervasiveSQL导出的数字格式日期/时间转换问题
一、数字格式的可能类型
这些数字大概率是PervasiveSQL(现Actian Zen)内部的日期/时间存储格式,常见两种方向:
- 基于特定纪元起始的时间戳(秒/毫秒/微秒计数)
- 数据库内部的日期编码值(将年、月、日压缩为整数的存储形式)
你推测Start_Date 132384788对应2020-08-08,反向验证通用纪元时间戳后可以排除:比如Unix时间戳(1970-01-01起始)中2020-08-08对应1596825600,和你的数字差两个数量级;2000-01-01起始的秒数对应645081600,也不匹配。因此更倾向于是Pervasive的内部编码格式。
二、最可靠的转换方式:数据库内直接转换
导出前用PervasiveSQL的内置函数将数值转成可读日期/时间,避免导出后处理的麻烦:
- 转换日期字段:
SELECT CAST(Start_Date AS DATE), CAST(Last_Tx_Date AS DATE) FROM your_table_name;
- 转换时间字段:
SELECT CAST(Last_Tx_Time AS TIME) FROM your_table_name;
如果CAST不生效,换用CONVERT函数尝试:
SELECT CONVERT(Start_Date, SQL_DATE), CONVERT(Last_Tx_Time, SQL_TIME) FROM your_table_name;
三、Excel中手动转换的尝试(已导出的情况)
如果已经导出到Excel,可测试以下公式(需根据实际格式调整):
- 假设是1800-01-01(Pervasive默认DATE纪元)起始的时间计数:
- 若为秒数:
=DATE(1800,1,1) + A1/86400 - 若为毫秒数:
=DATE(1800,1,1) + A1/86400000
设置单元格格式为日期,看结果是否匹配你的推测。
- 若为秒数:
- 若为当日时间计数(比如微秒):
=A1/1000000/86400
设置单元格格式为时间,验证是否为合理的当日时间值。
四、验证你的日期推测
要确认132384788是否对应2020-08-08,可在数据库中执行:
SELECT DATEDIFF(DAY, '2020-08-08', CAST(132384788 AS DATE));
如果返回结果为0,说明你的推测正确;若不为0,可调整纪元日期后再次测试。
内容的提问来源于stack exchange,提问作者ffusconi
相关产品推荐
相关产品推荐

