工作中要用到 Oracle 10g,经常要向其中的某张表插入事件发生的日期及时间。专门就 Oracle 的日期及时间显示方式和插入方式记一笔

工作中要用到 Oracle 10g,经常要向其中的某张表插入事件发生的日期及时间。专门就 Oracle 的日期及时间显示方式和插入方式记一笔。

像 Number,varchar2 等内置的数据类型一样,Oracle 用 Date 这个内置的数据类型来存储日期和时间。和 MS SQL Server 一样,日期和时间是存储在一个数据类型里的,没有只存储时间或只存储日期的单独的时间和日期数据类型。DATE 数据类型存储年月日和时分秒。

当显示 DATE 类型的数据时,Oracle 先要把存储的值从内部保存格式转化为可输出的字符串。通常,这种转换是通过 TO_CHAR 这个函数来完成的。如果没有用 TO_CHAR 函数来指定特定的日期时间格式,Oracle 默认的显示格式是“DD-MON-YY”。

例如,我们创建了一个表 x:

create table abc(a int, b date);

然后我们执行下面的查询语句:

select b from abc;

我们会看到如下结果(set head on):

B------------ 01-APR-09 (语言是英语) 或 B------------- 01-四月 -09 (语言是中文)

也就是说,每次显示 DATE 类型的数值时,Oracle 会自动调用 TO_CHAR 函数,并以默认日期显示格式为参数。我们可以显式地调用 TO_CHAR 函数,并指定自己想要的格式。例如:

SELECT TO_CHAR(b, 'YYYY/MM/DD') AS b FROM abc;

返回的结果是:

B------------ 2010/09/01

TO_CHAR 是个很强大的函数,可以把 Date,MLSLABEL,Number 类型的数据按指定的格式转换为 VARCHAR2 类型的数据,我们在这里只关心日期时间的转换。语法:

TO_CHAR(d [, fmt [, 'nlsparams'] ])

d 是 Date 类型的变量,fmt 是我们指定的日期时间格式,如果不显式指定就用 Oracle 的默认值。 fmt 里常用的跟日期时间有关的占位符如下:

MM 用数字表示的月份(例如,07)

MON 缩写的月份名称(例如,JUL)

MONTH 完整的月份名称(例如,JULY)

DD 日期(例如, 24)

DY 星期几的缩写(例如,FRI)

YYYY 用4位表示的年份(例如, 2008)

YY 用2位表示的年份,,取年份的后两位(例如,08)

RR 跟 YY 类似,但两位表示的年份被近似到 1950 到 2049 这个范围里的年份,例如 06 被认为是 2006,而不是 1906

AM (或 PM) 上下午指示符

HH 12进制表示的时间(1-12)

HH24 24进制表示的时间(0-23)

MI 分钟(0-59)

SS 秒(0-59)

以上讲的是利用 TO_CHAR 函数来显示 DATE 类型的数据,下面讲讲如何向表里插入一个 Date 类型的数值。这时我们要用到 TO_DATE 这个函数,把字符串表示的日期转换为 Date 类型。

跟 Oracle 显示日期时间时会隐性调用 TO_CHAR 函数一样,当 Oracle 期望一个 Date 类型的值时,它会隐性调用 TO_DATE 函数来转换输入的字符串,依据的默认格式是“DD-MON-YY”。

还是以我们的 x 表为例,我们可以直接输入:

insert into abc values(99, '31-may-08');

但是,在显示时不管用什么格式都不会影响我们实际储存的数据;在插入时,单纯采用 Oracle 的默认格式就不是那么符合工作需要了,我们还是需要显式调用 TO_DATE 函数,例如:

insert into abc values(99, to_date('2008/05/31:12:00:00AM', 'yyyy/mm/dd:hh:mi:ssam'));

TO_DATE 函数的语法:

TO_DATE(char [, fmt [, 'nlsparams'] ])

char 是表示日期和时间的字符串。fmt 的表示方法和 TO_CHAR 函数一样。

我们前面一直提到 Oracle 默认的日期时间格式是“DD-MON-YY”,其实,我们还可以修改这个默认格式,把它改成我们需要的格式。在 SQL*plus 里面输入下面的命令:

alter session set NLS_DATE_FORMAT=''; ——这个改变只对当前的会话(session)有用。

例如:

SQL> alter session set nls_date_format='yyyy-mm-dd';会话已更改。SQL> insert into abc (b) values('2004-08-26');已创建1行。

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

用 Oracle 内置的函数 SYSDATE 可以返回系统当前的日期和时间,例如:

select to_char(sysdate, 'Dy DD-Mon-YYYY HH24:MI:SS') as "Current Time" from dual;

Two interesting things to note here:

You can use double quotes to make names case sensitive (by default, SQL is case insensitive), or to force spaces into names. Oracle will treat everything inside the double quotes literally as a single name. In this example, if "Current Time" is not quoted, it would have been interpreted as two case insensitive names CURRENT and TIME, which would actually cause a syntax error. DUAL is built-in relation in Oracle which serves as a dummy relation to put in the FROM clause when nothing else is appropriate. For example, try "select 1+2 from dual;". Another name for the built-in function SYSDATE is CURRENT_DATE. Be aware of these special names to avoid name conflicts.

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

Operations on DATE You can compare DATE values using the standard comparison operators such as =, !=, >, etc.

You can subtract two DATE values, and the result is a FLOAT which is the number of days between the two DATE values. In general, the result may contain a fraction because DATE also has a time component. For obvious reasons, adding, multiplying, and dividing two DATE values are not allowed.

You can add and subtract constants to and from a DATE value, and these numbers will be interpreted as numbers of days. For example, SYSDATE+1 will be tomorrow. You cannot multiply or divide DATE values.

With the help of TO_CHAR, string operations can be used on DATE values as well. For example, to_char(, 'DD-MON-YY') like '%JUN%' evaluates to true if is in June.

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

oracle 查询字段除了as,Oracle中怎样查询数据表的哪个字段是主键相关推荐

  1. mysql 字段操作_Mysql:数据库操作、数据表操作、字段操作整理

    mysql 登录本机 mysql -u root -p password 数据库操作 创建数据库 命令:create database 例如:mysql> create database xhk ...

  2. php怎么更新多条数据,PHP中批量更新数据表中多条记录

    class test { /** * 创建像这样的查询: "IN('a','b')"; * * @author wengxianhu * @created to 2013-05-2 ...

  3. oracle中快速复制数据表(创建数据表)

    1.普通创建表方式如下: create table emp(empno number(4) primary key,ename varchar2(20),sal number(7,2)); 2.快速创 ...

  4. db2查询字段备注_通过逐浪数据精灵管理sqlserver数据表备注以及字段说明

    通过逐浪数据精灵管理sqlserver的数据表备注以及字段说明备注(附脚本方法) 基本介绍 逐浪数据精灵,是由逐浪软件团队提供的生成态产品,可以快速的方便的管理数据表,目前对商业用户开放. 管理数据库 ...

  5. 在MySql数据库中创建数据库dbjava,数据表book,字段包括bno,bname,price,count(编号、书名、单价、数量)。 利用JDBC连接数据库dbjava,实现数据表的增删 改查

    题目 1.在MySql数据库中创建数据库dbjava,数据表book,字段包括bno,bname,price,count(编号.书名.单价.数量). 2.利用JDBC连接数据库dbjava,实现数据表 ...

  6. 假设mysql数据表t1有字段_Mysql 索引及优化

    什么是索引 索引是什么?相信大家都用过字典.你是怎么从厚厚的新华字典中找到你需要找到的那个字的呢?又是怎么从一本书中快速定位到你需要的章节? 我们都是通过书中的目录,然后根据目录中的页码定位到我们要的 ...

  7. mysql中大数据表alter增加字段报错:1034 Incorrect key file for table 'table_name'; try to repair it...

    mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it" 现 ...

  8. mysql 字段写入_MySQL为数据表的指定字段插入数据

    username not null 没有默认值/有默认值   insert不插入username字段 均不报错 2014年07月23日21:05    百科369 MySQL为数据表的指定字段插入数据 ...

  9. Case Study: 利用PHP获取关系型数据库中多张数据表的数据

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个多数据表关联的网页.在上一个案例(Case Study: 利用JS实现数据库网 ...

  10. access vba表字段_【Access】创建数据表并新增字段

    时 间:2016-08-02 13:29:20 作 者:摘 要:用代码创建数据表并新增字段 正 文: 在DAO中,可以通过CreateTableDef方法在数据库中创建新的数据表,其具体的语法格式如下 ...

最新文章

  1. JAVA设计模式之不变模式
  2. 如何提高 Xcode 的编译速度
  3. SQLServer特殊字符/生僻字与varchar
  4. 002_SpringBoot整合Servlet
  5. shell只允许某些ipssh登录,配合iptables最好
  6. TIP 2018论文概述:基于深度学习的HEVC复杂度优化
  7. 模拟退火算法求解旅行商问题(python实现)
  8. 关于web工程项目路径的一些说明
  9. 网站三级分销数据库如何设计,简单案例
  10. hp服务器硬盘ultra320,HP服务器上安装和管理HP 磁盘柜MSA500G.pdf
  11. redis源码剖析(1):基础数据结构SDS
  12. 基于神经网络的实体识别和关系抽取联合学习
  13. ArcBlock 将作证支持美国华盛顿州区块链立法 | ABT 活动
  14. 用全开源的协同OA办公平台,可以自己搭建OA啦!
  15. 阿里云专有网络VPC学习笔记
  16. 新浪微博API[赞]接口和[取消赞]接口
  17. 块存储、文件存储、对象存储这三者的区别
  18. 三天一题-20- Integer to Roman(Integer转成古罗马数字)
  19. 联手友盟+打造数据融合“样板间”, 好兔视频成功逆势突围
  20. 2020年书法落款_学书法的请注意,落款不要写“庚子年”

热门文章

  1. “由于/bin 不在PATH 环境变量中,故无法找到该命令”
  2. 如何使用小的显存训练大的batch_size
  3. matplotlib多个饼状图
  4. Linux + Nginx + Uwsgi + Django 搭建单服务器
  5. 2018-01-11 Antlr4实现数学四则运算
  6. 牛客小白月赛6 水题 求n!在m进制下末尾0的个数 数论
  7. 编译可在Android上运行的qemu user mode
  8. RHEL6.1 安装 Oracle10gr2 (图文、解析)
  9. UVA 1471 Defense Lines 防线 (LIS变形)
  10. 【驱动】linux下I2C驱动架构全面分析