热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Oracle与PostgreSQL中Timestamp型公元前、后数值详解及JDBC存取

字段:datevalue1:2010-01-01value2:2010-01-01BC1.直接向数据库插入数值时:oracle需要使用to_timestamp(2010-01-01,yyyy-mm-ddBC),PG可以直接用字符串‘2010-01-01BC。2.直接从数据库查询时:在oracle数据库中直接查询date

字段:date

value1: 2010-01-01

value2: 2010-01-01BC

1.直接向数据库插入数值时:

   oracle需要使用to_timestamp('2010-01-01','yyyy-mm-ddBC'),

    PG可以直接用字符串‘2010-01-01BC'。

2.直接从数据库查询时:

   在oracle数据库中直接查询date字段,value1和value1显示没有区别,均为2010-01-01,

   使用to_char(time,'dd-mm-yyyybc','nls_date_language=American') ,才显示出bc和ad。如下:

1

SQL> select time,to_char(time,'dd-mm-yyyybc','nls_date_language=American') AS TRUDATE;

2

3

TIME                    TRUEDATE

4

---------------------------------------------------------------------------

5

01-JAN-10 12.00.00.000000 AM        01-01-2010bc

6

01-JAN-10 12.00.00.000000 AM        01-01-2010ad

  在PG中:直接查询即可显示BC,如下:

1

highgo=# select * from testtime;

2

id |          time

3

----+------------------------

4

  1 | 2010-01-01 00:00:00

5

  2 | 2010-01-01 00:00:00 BC

3.在java中,分别取value1和value2的字符串值(用于copy)和时间戳值(用于insert,绑定参数)。

          java代码:                     

01

System.out.println("DataType: "+rs.getMetaData().getColumnTypeName(1));         

02

03

rs.next();

04

System.out.println("getString:   " + rs.getString(1));

05

Timestamp time1=  rs.getTimestamp(1);

06

System.out.println("getTimestamp:   " + time1);

07

08

rs.next();

09

System.out.println("getString:   " + rs.getString(1));

10

Timestamp time2=  rs.getTimestamp(1);

11

System.out.println("getTimestamp:   " + time2);

12

13

System.out.println("time1Compare2Time2:  "+ time1.compareTo(time2));

       Oracle的输出结果:

       DataType:  TIMESTAMP 

       getString:   2010-01-01 00:00:00.0

       getTimestamp:   2010-01-01 00:00:00.0

       getString:   -2010-01-01 00:00:00.0          

       getTimestamp:   2011-01-01 00:00:00.0    

       time1Compare2Time2:  1    

      分析:该结果说明了java得到的字符串是带时间符号的,得到的时间戳却不带符号,但是比较的结果却是正确的(2010-01-01 要比 2010-01-01 BC更未来),但是得到的时间戳却是一个不带符号的怪异的值,搜索网络,得到一个来PG文档的符合的解释(虽然相符,但无法保证确切性,还有待进一步查证):If BC has been specified, negate the year and add one for internal storage. (There is no year zero in the Gregorian calendar, so numerically 1 BC becomes year zero.) 意思是:如果声明了 BC 则对年份取其负数并加一,用于内部保存。因为在格里高利历法里没有零年,所以数字上的 1BC 是公元零年。

         PG的输出结果:            

         DataType: timestamp

         getString:   2010-01-02 00:00:00

         getTimestamp:   2010-01-02 00:00:00.0

         getString:   2010-01-02 00:00:00 BC

         getTimestamp:   2010-01-02 00:00:00.0

         time1Compare2Time2: 1

         分析:这个结果的字符串是标明公元前的,但是得到的时间戳却没有任何的区别,但是对两个时间戳比较的结果仍然是正确的(即2010-01-01 要比 2010-01-01 BC更未来).

4.在PG中测试Timestamp的COPY情况:   

      带负号的时间戳(即公元前的时间)是无法使用copy的;

      我们来测试带BC的时间戳,结果是带BC的时间戳是可以使用copy的。

     文本time.csv中存储以下内容,使用copy testtime from 'G:/time.csv' with csv;,结果copy成功,查询数据无误。

1

"3","2011-01-02 00:00:00"

2

"4","2011-01-02 00:00:00 BC"


推荐阅读
  • 本文详细探讨了不同SQL数据库管理系统(DBMS)在限制输出结果、拼接字段和日期时间处理方面的函数差异。通过具体示例,帮助读者理解并掌握如何在不同DBMS中实现相同功能。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了 GWT 中 PopupPanel 类的 onKeyDownPreview 方法,提供了多个代码示例及应用场景,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本题探讨了一种字符串变换方法,旨在判断两个给定的字符串是否可以通过特定的字母替换和位置交换操作相互转换。核心在于找到这些变换中的不变量,从而确定转换的可能性。 ... [详细]
  • 在 Windows 10 中,F1 至 F12 键默认设置为快捷功能键。本文将介绍几种有效方法来禁用这些快捷键,并恢复其标准功能键的作用。请注意,部分笔记本电脑的快捷键可能无法完全关闭。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 计算机网络复习:第五章 网络层控制平面
    本文探讨了网络层的控制平面,包括转发和路由选择的基本原理。转发在数据平面上实现,通过配置路由器中的转发表完成;而路由选择则在控制平面上进行,涉及路由器中路由表的配置与更新。此外,文章还介绍了ICMP协议、两种控制平面的实现方法、路由选择算法及其分类等内容。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
author-avatar
bv方法_484
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有