暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

磐维数据库中使用日期的四种方式

武铮 2024-11-14
415

本文将介绍在磐维数据库中如何使用日期来查询数据。

interval间隔类型

第一种比较常见的使用方式是intervalinterval类型支持对时间进行运算,非常方便。

例如查询过去30天的订单总额,可以使用间隔类型

sysdate - INTERVAL '30 days'

参考示例语句如下:

SELECT sum(amount) 
  FROM orders
 WHERE order_date >= sysdate - INTERVAL '30 days';

也可以修改sysdate为current_date返回当前日期而不包含时间。

SELECT sum(amount) 
  FROM orders
 WHERE order_date >= current_date - INTERVAL '30 days';

再稍微复杂一点就是间隔范围查询,例如将订单按时间范围分类为:“30-60天前”、“60-90天前”

SELECT
    CASE
        WHEN order_date BETWEEN (sysdate - INTERVAL '60 days') AND (sysdate - INTERVAL '30 days')
            THEN '30-60 days ago'
        WHEN order_date BETWEEN (sysdate - INTERVAL '90 days') AND (sysdate - INTERVAL '60 days')
            THEN '60-90 days ago'
    END AS date_range,
    COUNT(*) AS total_orders,
    SUM(amount) AS total_sales
FROM
  orders
WHERE
  order_date BETWEEN (sysdate - INTERVAL '90 days') AND (sysdate - INTERVAL '30 days')
GROUP BY date_range
ORDER BY date_range;

   date_range   | total_orders | total_sales
----------------+--------------+-------------
 30-60 days ago |          239 |   321653.81
 60-90 days ago |          202 |    74235.42

date_trunc按预定格式截断

使用date_trunc函数可以非常便捷地对时间类型按按日、周、月、季度和年预定格式进行截断。

/* 本月的头一天 */
SELECT date_trunc('month', current_date);

/* 本周的头一天 */
SELECT date_trunc('week', current_date);

/* 本年的头一天 */
SELECT date_trunc('year', current_date);

/* 本季度的头一天 */
SELECT date_trunc('quarter', current_date);

例如按月份显示订单数量和总订单数量:

SELECT
  date_trunc ('month', order_date) AS month,
  COUNT(*) AS total_orders,
  SUM(amount) AS monthly_total
FROM orders
GROUP BY 1
ORDER BY month;

        month        | total_orders | monthly_total
---------------------+--------------+---------------
 2024-09-01 00:00:00 |           21 |       3276.21
 2024-10-01 00:00:00 |           49 |       6753.18
(2 rows)

date_trunc函数支持的预定义格式包括:millennium、century、decade、year、quarter、week、day、hour、minute、second、millisecond

extract函数

extract函数可以提取日期或时间类型的特定值。例如,日、月、年、时、分、秒等值。

SELECT extract('epoch' from sysdate);
 date_part  
------------
 1730346050
(1 row)

SELECT extract('hour' from now());
 extract 
---------
       3
(1 row)

to_char日期格式转换函数

to_char函数的示例如下:

SELECT to_char(now(),'yyyymmdd hh24:mi:ss.ff7');

          to_char          
--------------------------
 20241031 03:56:49.4690947
(1 row)

输出四位年、两位月份、两位日,二十四进制的时分秒,七位精度的毫秒值。

总结

本文介绍了使用interval对日期进行加减修改等运算、使用date_trunc对日期时间进行截断,使用extract函数进行特定值提取,使用to_char函数对日期格式或文本字符串进行格式转换。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论