Oracle中的TIMESTAMP数据类型很多人用的都很少,所以即使最简单的一个查询返回的结果也会搞不清楚到底这个时间是什么时间点。
例如:
27-1月 -08 12.04.35.877000 上午
这个时间到底是几点呢?中午12:04分,那就错了,其实使用to_char函数转换后得到如下结果:
2008-01-27 00:04:35:877000
说明这个时间是凌晨的00:04分,而不是中午的12:04分。
发生此问题的原因如下:
示例:
SELECT TO_CHAR(TO_DATE('2008-01-29 00:05:10', 'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh:mi:ss am') FROM DUAL
首先把一个00:05分的时间进行转换,按照'yyyy-mm-dd hh:mi:ss am'格式进行转换,得到的结果是:
2008-01-29 12:05:10 上午
这说明Oracle在进行日期转换成字符串的过程中,如果小时转换使用的是12进制的格式,则凌晨00点会被认为是上午12点,然后才是上午1点、2点、3点。。。
oracle中12进制的计时不是从0-11,而是从1-12的,所以如果是夜里零点,你不能记成1点,那只能记成12点了。(不知道这是不是跟洋人的习惯有关?)
现在我们来看一下Oracle中对TIMESTAMP的处理:
SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT'
返回结果DD-MON-RR HH.MI.SSXFF AM,可以看到,这里默认情况下,使用的TIMESTAMP的格式是12进制的小时。
问题到这里已经找到根源了。
解决方法:
找到注册表:
[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0]
。。。
"NLS_TIMESTAMP_FORMAT"="YYYY-MM-DD HH24:MI:SS:FF6"
。。。
在注册表中设置Oracle环境变量的地方(也就是设置ORACLE_HOME的地方)设置NLS_TIMESTAMP_FORMAT的格式(也就是创建这样一个字符串项,然后设置它的值为你转换需要的掩码,我一般设置为YYYY-MM-DD HH24:MI:SS:FF6),然后关掉PL/SQL DEVELOPER,重新登录,如果没有效果,重启电脑。
pl/sql developer中读取的是注册表中设置的NLS_TIMESTAMP_FORMAT格式,那么只要在注册表中设置Oracle环境变量的地方(也就是设置ORACLE_HOME的地方)设置NLS_TIMESTAMP_FORMAT的格式(也就是创建这样一个字符串项,然后设置它的值为你转换需要的掩码,我一般设置为YYYY-MM-DD HH24:MI:SS:FF6),然后关掉PL/SQL DEVELOPER,再继续登陆,以后我们看到的TIMESTAMP时间就会自动转换成大家需要的格式了。
另一种方式:http://oracle.chinaitlab.com/PLSQL/38364.html
或者直接修改 pl/sqldeveloper 里的 NLS options 的设置
分享到:
相关推荐
PL/SQL提供了隐式游标和显示游标的两种类型,分别用于处理SELECT语句的返回结果。使用游标的FOR循环可以简化对游标的操作。 循环语句是PL/SQL编程中用来重复执行一组语句的结构,包括loop、while、for三种形式,...
### PL/SQL编程基础知识 #### 一、PL/SQL简介 PL/SQL(Procedural Language for SQL)是一种过程化语言,它结合了SQL的数据操纵功能和过程化语言的控制结构,使用户能够灵活地控制数据操作流程。作为Oracle数据库...
2. 数据类型:PL/SQL支持多种数据类型,包括数值类型(如NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期时间类型(DATE)、布尔类型(BOOLEAN)、以及复合和引用类型(如记录、表类型、指针等)。 3. 变量与...
PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行代码。PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、...
12. **数据库对象的DDL操作**:学习如何在PL/SQL中创建、修改和删除数据库对象,如表、视图、索引和存储过程。 13. **PL/SQL与SQL的集成**:了解如何在PL/SQL中嵌入SQL语句,以及SQL语句如何与PL/SQL逻辑相互配合。...
2. **数据类型**:PL/SQL有多种内置数据类型,如NUMBER(数字)、VARCHAR2(可变长度字符串)、DATE(日期时间)、BOOLEAN(布尔值)等。此外,还可以定义对象类型和复合类型。 3. **流程控制**:包括条件语句(IF-...
2. **变量和数据类型**:PL/SQL支持多种数据类型,如数值型(NUMBER)、字符串型(VARCHAR2、CHAR)、日期型(DATE)以及布尔型(BOOLEAN)。变量的声明和初始化是编写PL/SQL程序的基础。 3. **流程控制**:PL/SQL...
Oracle PL/SQL 语言是Oracle数据库系统中的一种高级编程语言,它是SQL的扩展,专为数据库管理和应用程序开发设计。PL/SQL集成了SQL的查询、操纵、定义和控制功能,并添加了过程化编程元素,使其成为数据库管理和开发...
PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...
汉化版不仅翻译了菜单、对话框和帮助文档,还可能包括对本地化日期和数字格式的支持,使得数据处理更加符合中国用户的习惯。 注册码是激活软件的关键,通常由一组特定的字符组成,用于验证用户对软件的合法使用权。...
### PL/SQL存储过程编程详解 #### 一、Oracle应用编辑方法概览 在Oracle数据库的应用开发中,存在多种编辑方法和技术,它们各有特点和适用场景。以下是对这些方法的概述: 1. **Pro*C/C++**: 这是一种C语言与...
PL/SQL支持多种数据类型,如数值类型(NUMBER、INTEGER)、字符类型(VARCHAR2、CHAR)、日期类型(DATE)、布尔类型(BOOLEAN)以及复合数据类型(记录、集合)等。 1.4 **PL/SQL的操作符** PL/SQL包含算术、比较...
PL/SQL提供多种数据类型,如NUMBER(数值型)、VARCHAR2(可变长度字符串)、DATE(日期时间)等。变量的声明通常包括类型和名称,例如:`DECLARE my_num NUMBER;` 三、PL/SQL流程控制 1. 条件控制:IF-THEN-ELSIF-...
- **日期(Date)格式**:用于定义日期的显示格式。 - **NULL处理**:如`NVL`、`COALESCE`等函数,用于处理NULL值。 - **巢状函数**:允许在一个函数中嵌套另一个函数。 #### 四、JOIN功能 - **JOIN类别**:包括内...
首选项章节包含了诸多个性化设置,如Oracle连接配置、用户界面选项、命令窗口配置、代码助手、键配置、外观、日期/时间格式等。 工具章节介绍了如何使用内置工具,如数据浏览器、查找数据库对象、编译无效对象、...
- PL/SQL支持几乎所有的SQL标准语句,包括SELECT、INSERT、UPDATE、DELETE等用于数据查询和修改的命令,以及DDL(Data Definition Language)用于创建、修改和删除数据库对象的语句。 3. **运行PL/SQL程序**: - ...
PL/SQL Developer 11 支持多种变量类型,包括数值、字符串、日期等。 5.4 保存测试脚本 用户可以将测试脚本保存到本地文件或 Oracle 数据库中。 5.5 跟踪运行时错误 PL/SQL Developer 11 可以跟踪运行时错误,...
1. **变量和数据类型**:PL/SQL支持多种数据类型,如数值型(NUMBER)、字符型(VARCHAR2, CHAR)、日期型(DATE)、布尔型(BOOLEAN)等,以及复合数据类型如记录(RECORD)和游标(CURSOR)。 2. **控制流语句**...
- **用户界面 - 日期/时间**:提供日期和时间格式的选项。 - **窗口类型 - 程序窗口**:介绍如何配置程序窗口的显示。 - **窗口类型 - SQL窗口**:提供定制SQL窗口的方法。 - **窗口类型 - 测试窗口**:说明如何配置...
Oracle PL/SQL是一种强大的数据库编程语言,用于在Oracle数据库中执行复杂的业务逻辑和数据操作。在"Oracle PL/SQL实例精讲--使用表,课后答案"中,读者可以深入理解如何有效地使用PL/SQL与Oracle数据库中的表格进行...