Oracle中日期和空值操作

  • 前言
  • 日期关键字
  • SYSDATE
  • SYSTIMESTAMP
  • 日期函数
  • TO_DATE
  • TO_CHAR
  • LAST_DAY
  • ADD_MONTHS
  • MONTHS_BETWEEN
  • NEXT_DAY
  • LEAST/GREATEST
  • 日期得计算
  • 日期RR注意点
  • 空值NULL
  • 默认值
  • 插入NULL
  • 修改NULL
  • NULL值的运算操作
  • 空值函数


前言

这一篇是最后的一个过度篇幅,主要涉及日期和空值操作。

日期关键字

SYSDATE

返回当前系统时间DATE类型的值,精确到秒,其本质是一个Oracle的内部函数
默认格式为:DD-MON-RR

SYSTIMESTAMP

返回当前系统时间的时间戳类型的值,精确到毫秒,本质也是内部函数

日期函数

TO_DATE

TO_DATE(‘2020-01-01 14:22:22’,‘YYYY-MM-DD HH24:MI:SS’) 将字符串按照指定格式转为日期
 如果是如下格式,即有不是数字、字母、符号,是不能转换的,要用就得加双引号,有时候有些符号都不可以,如果有这种问题,就将这些字符都加上双引号
 TO_DATE(‘2020年01月01日 14:22:22’,‘YYYY年MM月DD日 HH24:MI:SS’)
 改为
 TO_DATE(‘2020年01月01日 14:22:22’,‘YYYY“年”MM“月”DD“日” HH24:MI:SS’)

TO_CHAR

将日期按照指定格式转为字符串
TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS’)

与TO_DATE()刚好相反,这两个函数使用频率都很高

LAST_DAY

返回给定日期所在月份最后一天的日期。

SELECT LAST_DAY(SYSDATE) FROM dual

ADD_MONTHS

返回给定日期加上指定月份的日期,为负数则减去指定月份。
ADD_MONTHS(SYSDATE,12) 表示一年后今天的日期

MONTHS_BETWEEN

MONTHS_BETWEEN(DATE1,DATE2)
返回给定日期的相差月份

NEXT_DAY

NEXT_DAY(date,i)
返回给定日期的第二天开始一周内的指定周几的日期
i表示周几,1-7分别表示周日、周一……周六
不是表示第二天

LEAST/GREATEST

LEAST(D1,D2)/GREATEST(D1,D2,D3)
求最小/最大值,参数可以多个,至少一个。
除了日期外,常用的数字也可以比较大小。

日期得计算

日期可以与一个数字进行加减法,相当于加上指定天数。
两个日期相减即为相差得天数

日期RR注意点

日期得默认格式为:DD-MON-RR

这里的RR和YY是不一样的,它是关注世纪的,如果将字符串转为年的时候RR是关注世纪的。

date时间格式怎么判断空java date类型如何判断空值_date时间格式怎么判断空java


如果用户输入的时间是98年,也就是RR为98,即user为98,当前年份是2020年,即sys为20,根据上表的结果可知用户输入的98转为日期是上世纪的98年。

空值NULL

默认值

数据库表中的数据如果没有值就都是NULL

不能用=判断某个值是否为NULL
用 IS NULL/IS NOT NULL 作为判断依据
如果字段有非空约束即 NOT NULL 则无法将该字段的值设为NULL,新增,修改都无法操作

插入NULL

可以插入一条数据,将某个值设为NULL
分为隐式插入和显示插入
隐式插入即为不写该字段,他就会是默认值NULL
显示插入即写出该字段,将该字段的值设为NULL

修改NULL

可以将一条数据的某一个字段的值改为NULL
例如:

UPDATE A SET GENDER=NULL WHERE id=1

NULL值的运算操作

NULL与任何数字运算的结果还是NULL
NULL与任何字符串拼接还是原来的字符串,表示什么都没做

空值函数

NVL(A,B)
当A为NULL时,函数返回B
当A不为NULL时,函数返回A
即,将空值替换为一个非空的值。

NVL2(A,B,C)
当A不为NULL时,返回B
当A为NULL时,返回C
该函数根据A是否为NULL来返回不同结果