当前位置: 首页 > article >正文

深入解析下oracle date底层存储方式

    之前我们介绍了varchar2和char的数据库底层存储格式,今天我们介绍下date类型的数据存储格式,并通过测试程序快速获取一个日期。

一、环境搭建

1.1,创建表

    我们还是创建一个测试表t_code,并插入数据:

1.2,根据数据rowid,获取数据文件号和数据块id

二、数据存储格式导出

2.1,dump数据块

    我们先把存储数据的数据块进行dump,便于后续的存储格式比对。

2.2,dump文本数据

    我们通过oracle内置的dump函数,进行name和bj字段的底层存储数据的查看:

(16进制格式)

(10进制)

2.3,比对

    我们查看下dump数据块出来的数据,比对下前端dump函数出来的数据,对比下:

    可以看到,两边数据一样

 

三、说明

    oracle内部,date数据类型的内部代表码为12,也就是上面图中的TYP=12。根据这个内部码,oracle内部程序就知道该表该列的类型具体为什么。

    len=7,就告知了这个字段存储所占为7个字节。第一个字节:代表世纪,需要减去100获取实际值(120-100=20);第二个字节,代表年份,也需要减去100获取实际值(124-100=24);第三个字节代表月份(11);第四个字节代表天数(26);第五个字节代表小时,需要减去1获取实际值(5-1=4);第六个字节代表分钟,需要减去1获取实际值(23-1=22);第五个字节代表秒,需要减去1获取实际值(1-1=0)。

    我们写个简单的c语言程序,直接解析下上述的数据:

t_date(){
    int a[] = {120,124,11,26,5,23,1};
    int cent = a[0]-100;
    int year = a[1]-100;
    int month = a[2];
    int day = a[3];
    int hour = a[4]-1;
    int minute = a[5]-1;
    int second = a[6]-1;

    printf("获取时间为:%d%d-%d-%d %d:%d:%02d",cent,year,month,day,hour,minute,second);
}




int main() {
    t_date();

}

 

    我们测试的第一行数据,可以看到与直接的日期数据一模一样。 


http://www.kler.cn/a/411753.html

相关文章:

  • 研0找实习【学nlp】15---我的后续,总结(暂时性完结)
  • 英伟达发布 Edify 3D 生成模型,可以在两分钟内生成详细的、可用于生产的 3D 资源、生成有组织的 UV 贴图、4K 纹理和 PBR 材质。
  • 【Python中while循环】
  • rabbitmq 启动异常问题排查
  • 嵌入式驱动开发详解3(pinctrl和gpio子系统)
  • QML学习 —— 28、3种等待指示控件(附源码)
  • 利用Java爬虫获取1688商品类目:技术解析与代码示例
  • python操作Elasticsearch
  • PHP md5函数 生成的字符串是多少位的
  • 一个开源轻量级的服务器资源监控平台,支持告警推送
  • 应用商店双弹窗“APP在向用户申请权限时未同步告知用户申请此权限的理由”驳回uni-app应用上线的解决方法
  • 从零开始学GeoServer源码(二)添加支持arcgis切片功能
  • 小程序-基于java+SpringBoot+Vue的网上花店微信小程序设计与实现
  • Android Toast信息定位分析介绍
  • 基于Matlab实现Gabo滤波器(源码)
  • java虚拟机——JVM中,内存的哪些区域被划分为线程私有、哪些区域是线程共享的
  • 从0开始深度学习(32)——循环神经网络的从零开始实现
  • 常用的数据结构
  • llama-factory 系列教程 (七),Qwen2.5-7B-Instruct 模型微调与vllm部署详细流程实战
  • Springboot 整合 Java DL4J 构建自然语言处理之机器翻译系统
  • 实现一个可配置的TCP设备模拟器,支持交互和解析配置
  • Linux下环境基础开放工具
  • 林业产品推荐系统:Spring Boot解决方案
  • flink学习(7)——window
  • 基于SpringBoot+Vue的智慧社区网站-无偿分享 (附源码+LW+调试)
  • 企业后端多租户管理平台