kingbase8关于时间的用法

关于时间的函数

select CAST('2023-08-23' AS TIMESTAMP)  + INTERVAL '1 day' -- 2023-08-24 00:00:00.000
        
select CAST('2023-08-23' AS TIMESTAMP) -- 2023-08-23 00:00:00.000


select now()  --2023-08-19 11:12:14.767
select CURRENT_TIMESTAMP  --2023-08-19 11:04:45.304
select CURRENT_DATE   -- 2023-08-19 00:00:00.000

select  date_trunc('year', current_date) -- 2023-01-01 00:00:00.000
select  date_trunc('month', current_date) -- 2023-08-01 00:00:00.000
select  date_trunc('month', current_date) - interval '1 month' -- 2023-07-01 00:00:00.000
select  date_trunc('year', current_date) + interval '1 year'; --2024-01-01 00:00:00.000
select  current_date - interval '1 months'; -- 2023-07-19 00:00:00.000
select  DATE_TRUNC('day', CURRENT_TIMESTAMP) -- 2023-08-19 00:00:00.000
SELECT 
    DATE_TRUNC('YEAR', CURRENT_DATE) AS start_of_year, -- 2023-01-01 00:00:00.000
    DATE_TRUNC('YEAR', CURRENT_DATE) + INTERVAL '1 year - 1 day' AS end_of_year; -- 2023-12-31 00:00:00.000

    
select TO_TIMESTAMP(now(), 'YYYY-MM-DD HH24:MI:SS') -- 2023-08-19 11:14:30.000
select TO_TIMESTAMP(now(), 'YYYY-MM-DD HH24:MI')  -- 2023-08-19 11:15:00.000
select TO_TIMESTAMP(now(), 'YYYY-MM-DD')  -- 2023-08-19 00:00:00.000
select TO_TIMESTAMP(now())   -- 2023-08-19 11:16:20.745

select date_part('epoch', CURRENT_TIMESTAMP) --1692414787.852298
select EXTRACT(EPOCH FROM TO_TIMESTAMP(now(), 'YYYY-MM-DD HH24:MI:SS')) --1692443624
SELECT TO_TIMESTAMP('2023-08-24 10:03:47.000', 'YYYY-MM-DD HH24') AS truncated_datetime;

1、要查询今天(从今天的0点到当前时间)的某些数据

1、要查询今天(从今天的0点到当前时间)某一疾病种类的所有患者
SELECT *
FROM your_table_name
WHERE disease_type = 'your_disease_type'
    AND value_time >= DATE_TRUNC('day', CURRENT_TIMESTAMP)
    AND value_time <= CURRENT_TIMESTAMP;
    ---------------------------
SELECT *
FROM your_table_name
WHERE disease_type = 'your_disease_type'
    AND value_time BETWEEN DATE_TRUNC('day', CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMP;

这个查询使用了DATE_TRUNC函数来截断当前时间戳到最接近的一天(即今天的0点)。然后,通过比较时间戳列value_time,将查询限制在从今天0点到当前时间的时间范围内,从而获取今天的疾病患者数据。

1.2、第二种写法(CURRENT_DATE函数)

当查询涉及到时间范围时,还有另一种常用的方法,就是使用CURRENT_DATE函数来获取当前日期(不含时间部分),然后与时间戳进行比较。以下是这种方法的查询示例:

SELECT *
FROM your_table_name
WHERE disease_type = 'your_disease_type'
    AND value_time >= CURRENT_DATE
    AND value_time < CURRENT_DATE + INTERVAL '1 day';

在这个查询中,CURRENT_DATE会返回当前日期,没有时间部分。我们使用>=来筛选出从今天0点开始的记录,然后使用<与明天的日期进行比较,以确保不包含明天的数据,从而得到从今天0点到现在的数据。

2、查询根据create—time字段查询一个月内的数据、三个月内的数据、半年的数据、一年的数据怎么写

一个月内的数据:
SELECT *
FROM your_table
WHERE create_time >= current_date - interval '1 month';
三个月内的数据:
SELECT *
FROM your_table
WHERE create_time >= current_date - interval '3 months';
半年内的数据:
SELECT *
FROM your_table
WHERE create_time >= current_date - interval '6 months';
一年内的数据:
SELECT *
FROM your_table
WHERE create_time >= current_date - interval '1 year';

2.2、第二种方式
除了使用interval和日期函数外,你还可以使用date_trunc函数来查询特定时间范围内的数据。date_trunc函数允许你按照不同的精度来截断日期,然后进行比较。以下是使用date_trunc函数查询不同时间范围内数据的示例:

一个月内的数据:
SELECT *
FROM your_table
WHERE create_time >= date_trunc('month', current_date) - interval '1 month';
一个年内的数据:
SELECT *
FROM your_table
WHERE create_time >= date_trunc('month', current_date) - interval '1 year';

3、求两个时间的时间差,结果为相差的秒数,毫秒值不参与计算

with su as(select 
 EXTRACT(EPOCH FROM TO_TIMESTAMP(p.value_time, 'YYYY-MM-DD HH24:MI:SS')) value_time --(1690121331) --2022-07-23 14:08:51.689
 from cdr_biz_element_data p
 where id =1659 ),   
 su2 as (select 
 EXTRACT(EPOCH FROM TO_TIMESTAMP(p.value_time, 'YYYY-MM-DD HH24:MI:SS')) value_time  --2022-07-23 14:08:51.689
 from cdr_biz_element_data p
 where id =1661)
 select 
    a.value_time - b.value_time as val    -- 86400
   	from 
   	(select value_time from su) a,
   	(select value_time from su2) b

EXTRACT(EPOCH FROM TO_TIMESTAMP(p.value_time, ‘YYYY-MM-DD HH24:MI:SS’)) value_time ,该语法计算结果为毫秒值:1690121331

4 、求的是秒数差 跟 毫秒值有关

date_part('epoch', discharge_dt)-date_part('epoch', arrive_dt)

select 
date_part('epoch', create_time)-date_part('epoch', update_time)
from cdr_biz_element_data
where id = 491

5、两段时间之前的所有月份

  SELECT generate_series(
        DATE '2023-04-01',
        DATE '2023-12-31',
        INTERVAL '1 month'
    ) AS tim
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kingbase是一种据说是与Oracle兼容的关系型数据库管理系统,它具有类似于Oracle的许多功能和语法。在Kingbase中,也有一些日期函数可以用来处理和操作日期和时间数据。 1. SYSDATE函数:SYSDATE函数用于返回当前系统日期和时间。使用这个函数可以方便地获取当前的日期和时间值,并进行其他的日期函数的计算和比较。 2. TO_CHAR函数:TO_CHAR函数用于将日期类型的数据转换为指定格式的字符类型数据。可以通过指定参数来定义输出的日期格式,例如'YYYY-MM-DD'表示输出的日期格式为年-月-日。 3. ADD_MONTHS函数:ADD_MONTHS函数用于在给定的日期上增加指定的月份。可以通过指定参数来确定增加的月数,例如ADD_MONTHS('2010-01-01', 3)表示在2010年1月1日的基础上增加3个月。 4. MONTHS_BETWEEN函数:MONTHS_BETWEEN函数用于计算两个日期之间相隔的月份。可以通过指定参数来确定两个日期的计算方式,例如MONTHS_BETWEEN('2012-01-31', '2011-01-01')表示计算2011年1月1日和2012年1月31日之间相隔的月份。 5. TRUNC函数:TRUNC函数用于截取日期,即去掉日期中的时分秒部分。可以通过指定参数来决定截取的方式,例如TRUNC('2019-12-31', 'YEAR')表示截取日期到年份的开始。 除了以上提到的几个日期函数外,Kingbase还提供了其他一些常用的日期函数,例如EXTRACT函数用于获取日期的某个部分(年、月、日等),LAST_DAY函数用于获取月份的最后一天,等等。这些日期函数的使用可以让我们在Kingbase数据库中更方便地处理和操作日期和时间数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值