Oracle的日期

日期函数

select date '2024-12-1' from dual;--指定日期
select date '2024-2-29' + 1 from dual;--日期进行偏移

select to_date('2023-3-1','yyyy-MM-dd') from dual;--字符串转日期
select to_char(sysdate,'yyyyMMdd') from dual;--日期转字符串
select to_char(sysdate,'yyyyMMdd HH:MI:SS') from dual;--日期转字符串,12小时制度
select to_char(sysdate,'yyyyMMdd HH24:MI:SS') from dual;--日期转字符串,12小时制度

select sysdate from dual; --系统日期,包含时分秒 2024/7/22 14:19:27
select trunc(sysdate,'dd') from dual;--系统日期,只有日期
select trunc(sysdate) from dual;--系统日期,只有日期,简化写法

select trunc(date '2022-10-3','yyyy') from dual;--年初
select trunc(date '2022-10-3','MM') from dual;--月初
select trunc(date '2022-10-3','dd') from dual;--日初,也就是当日
select trunc(sysdate) from dual;--当日,默认为dd
select extract(YEAR FROM date '2021-10-3') from dual;--年
select extract(MONTH FROM date '2021-12-3') from dual;--月
select extract(DAY FROM date '2021-10-18') from dual;--日

select add_months(date '2021-01-01', -12) from dual;--2020/1/1,第二参数为偏移月份,向前偏移
select add_months(date '2021-01-01', 12) from dual;--2022/1/1,第二参数为偏移月份,向后偏移

select trunc(date '2021-09-01', 'yyyy') from dual;--当年年初  2021/1/1
select add_months(trunc(sysdate,'yyyy'),12) -1 from dual;--当年年末 2024/12/31


时间戳

--时间戳是指格林威治时间1970年1月1日00分00秒(北京时间为1970年1月1日8时00分00秒起)
--一天=24小时*60*60=86400秒
SELECT (SYSDATE - to_date('1970-1-1 8','YYYY-MM-dd HH24')) * 86400 FROM dual;
select systimestamp from dual;--获取系统时间戳
select to_char(systimestamp,'yyyy/mm/dd hh24:mi:ss') from dual;--时间戳转字符串
select to_char(systimestamp,'yyyy/mm/dd hh24:mi:ss.ff') from dual;--时间戳转字符串,更高的精度
select to_timestamp('2024/07/22 16:09:24','yyyy/mm/dd hh24:mi:ss') from dual;--字符串转时间戳
select to_timestamp('2024/07/22 16:09:24.662540','yyyy/mm/dd hh24:mi:ss.ff') from dual;--字符串转时间戳
select to_date(to_char(systimestamp,'yyyy/mm/dd hh24:mi:ss'),'yyyy/mm/dd hh24:mi:ss') from dual;--时间戳转日期
select to_date(to_char(systimestamp,'yyyy/mm/dd'),'yyyy/mm/dd') from dual;--时间戳转日期
select systimestamp+0 from dual; --oracle会自动进行隐式转换 时间戳转日期


时间戳和日期的区别

在Oracle数据库中,`DATE` 和 `TIMESTAMP` 都是用来存储日期和时间数据的类型,但它们之间存在一些关键的区别:
1. **精度**:
   - `DATE`: 存储的日期和时间信息的精度为一天中的秒。它包括年、月、日、小时、分钟和秒(没有毫秒)。
   - `TIMESTAMP`: 提供更高的精度,可以精确到小数点后几位的秒,具体取决于使用的版本和定义。它可以存储毫秒甚至微秒级别的精度。
2. **范围**:
   - `DATE`: 范围从 'January 1, 4712 BC' 到 'December 31, 9999 AD'。
   - `TIMESTAMP`: 范围更广,通常可以覆盖从远古到遥远未来的时间跨度,具体依赖于Oracle版本。
3. **时区支持**:
   - `DATE`: 不包含时区信息。所有的日期和时间都假定是在数据库服务器所在的时区。
   - `TIMESTAMP`: 可以选择性地包含时区信息(使用 `TIMESTAMP WITH TIME ZONE` 或 `TIMESTAMP WITH LOCAL TIME ZONE`)。这使得它非常适合处理跨时区的数据。
4. **存储格式**:
   - `DATE` 和 `TIMESTAMP` 在内部都被存储为二进制格式,但它们的内部表示不同。`DATE` 存储为7字节,而 `TIMESTAMP` 根据精度的不同,可能需要更多字节
5. **默认显示格式**:
   - `DATE` 默认的显示格式是 'DD-MON-RR'。
   - `TIMESTAMP` 默认的显示格式包含了日期和时间,以及可能的时区信息,具体格式根据数据库设置而变化。
6. **函数和操作**:
   - `DATE` 和 `TIMESTAMP` 类型都可以使用许多相同的日期和时间函数,但 `TIMESTAMP` 提供了更多的函数来处理高精度和时区转换。
在选择使用哪种类型时,主要考虑因素包括所需的精度、是否需要时区支持以及具体的业务需求。


 

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值