关于时间函数
关于时间的函数
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