专题实验 日期类型

专题实验 日期类型

存储的时间表示与标准时间 UTC 的时差, UTC 表示0:0

date: 不带时区, 存储日期和时间, 精确到秒

timestamp: 不带时区, 存储日期和时间, 精确到小数点后9位

timestamp with timezone: 包括时区, 客户端时区和UTC的时区差, 例如: ‘1999-04-15 8:00:00-8:00′  这里是 负8小时.

timestamp with local timezone: 存储到数据库时, 会发生转换. 存储的是客户端所在时区, 转换: 客户端所在时区->UTC->db所在时区, 所以如果db所在时区设置成UTC, 那么右边就不需要转换.

注意, 这个转换都是先转换成 utc, 然后再从UTC像另一种时间转换, 所以, 如果需要存储 timestamp with local timezong 这种类型, 建议将DB TIME ZONE 设置成 UTC, 这样, 转换的次数可以减少一次.

面对这么多类型, 什么时候使用什么类型 ?

  • 如果对时间要求到小数的秒, 则可以选择 TIMESTAMP
  • 如果希望数据库能够自动在数据库时区和会话时区之间进行时间转换, 使用TIMESTAMP WITH LOCAL TIME ZONE
  • 如果希望跟踪数据入口的会话时区, 使用 timestamp with time zone.
  • 我们可以使用 timestamp 类型代替 date类型, 一个不带亚秒精度信息的 timestamp 会占用 7个字节, 和date一样, 如果 timestamp 带有压秒数据, 就会占用 11 个字节的存储空间.

其他一些考虑:

  • 要是必须和 timestamp 数据类型出现之前的已有应用程序相兼容, 就的使用 DATE 类型.
  • 如果使用数据库是 oracle 9i 以前的版本, 我们别无选择只能用 DATE 类型.

Interval

interval year to month:

interval day to second:

下边是计算工龄的例子

   1:  -- chap10_02.sql
   2:  declare
   3:      start_date TIMESTAMP;
   4:      end_date TIMESTAMP;
   5:      service_interval interval year to month;
   6:      years_of_service number;
   7:      months_of_service number;
   8:  begin
   9:      start_date := to_timestamp('29-dec-1988', 'dd-mon-yyyy');
  10:      end_date := to_timestamp('26-dec-1995', 'dd-mon-yyyy');
  11:      
  12:      -- 确定工龄, 并显示出来:
  13:      service_interval := (end_date - start_date) year to month;
  14:      dbms_output.put_line(service_interval);
  15:      
  16:      years_of_service := extract(year from service_interval);
  17:      months_of_service := extract(month from service_interval);
  18:      dbms_output.put_line(years_of_service || 'years and ' || months_of_service || 'months');
  19:  end;
  20:  /
  21:  show errors;

oracle 分为两大时区

数据库时区 select dbtimezone from dual

session时区 select sessiontimezone from dual

alter session set nls_date_format = ‘YYYY-MM-DD HH24:MI: SS’;

在了解了相关数据类型后,那么我们该如何在它们之间做出选择呢?

当你不需要保存时区/地区信息的时候,选择使用TIMESTAMP数据类型,因为它一般需要7-11bytes的存储空间,可以节省空间。

当你需要保存时区/地区信息的时候,请选择使用TIMESTAMP WITH TIMEZONE数据类型。比如一个跨国银行业务应用系统,需要精确纪录每一笔交易的时间和地点(时区),在这种情况下就需要纪录时区相关信息。因为需要纪录时区相关信息,所以需要多一些的存储空间,一般需要13bytes。

当你并不关心操作发生的具体地点,而只是关心操作是在你当前时区(当地)几点发生的时候,选择使用TIMESTAMP WITH LOCALTIME ZONE。比如一个全球统一的change controlsystem。用户可能只关心某某操作是在我的时间几点发生的(比如中国用户看到的是北京时间8:00am,而伦敦的用户看到的是0:00am)。记住,此类行不保存时区/地区信息,因此如果需要保存相关信息的要慎重!

转载于:https://www.cnblogs.com/moveofgod/p/3790324.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109801.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 555施密特触发器电路图_555定时器构成的施密特触发器

    555施密特触发器电路图_555定时器构成的施密特触发器目录方法作用内部电路分析555内部电路图分析仿真电路图仿真结果总结将555的6脚和2脚连接在一起,并在5脚接上0.01uF的电容用于滤波,这就构成了施密特触发器。施密特触发器可作为波形整形电路,能将模拟信号波形整形为数字电路能够处理的方波波形,而且由于施密特触发器具有滞回特性,所以可用于抗干扰,其应用包括在开回路配置中用于抗扰,以及在闭回路正回授/负回授配置中用于实现多谐振荡器。百度百科:https://baike.baidu.com/item/%E6%96%

    2025年7月24日
    2
  • java多线程—java线程的创建和线程的生命周期

    java线程的创建和线程的生命周期

    2022年2月24日
    50
  • IDEA–IDEA debug断点调试技巧

    目录一、Debug开篇二、基本用法&快捷键三、变量查看四、计算表达式五、智能步入六、断点条件设置七、多线程调试八、回退断点九、中断DebugDebug用来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。…

    2022年4月5日
    694
  • 校园导航系统_对学弟学妹高考的话

    校园导航系统_对学弟学妹高考的话欢迎学弟学妹对我们的软件提出宝贵意见。软件说明书项目名称:铁大校园导航(Alpha版)开发小组:五人行开发团队(曹坤,翟凯,梁世豪,司新红,万彤)简要说明:本导航旨在开发成为一款基于android的

    2022年8月3日
    2
  • Jupyter Notebook: ‘_xsrf’ argument missing from POST 解决方案

    Jupyter Notebook: ‘_xsrf’ argument missing from POST 解决方案JupyterNotebook:’_xsrf’argumentmissingfromPOST解决方案问题描述:在JupyterNotebook里跑了几天的代码,notebook右上角突然显示’_xsrf’argumentmissingfromPOST,无法保存现有file也无法stop或runcell。命令行显示报错信息如下://Anhighlighted…

    2022年5月19日
    83
  • 使用虚拟环境virtualenv/Virtualenvwrapper隔离多个python

    使用虚拟环境virtualenv/Virtualenvwrapper隔离多个python

    2021年11月21日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号