达梦数据库时间查询相关sql

文章讲述了作者在公司新项目中转向达梦数据库,分享了如何使用SQL进行按月、周、年分组查询数据总数,以及查询特定时间段(如前7天、一个月、半年和一年)的数据。寻求更优解和建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司要求使用达梦数据库,虽然很想念我的mysql和navicat,但是还是得硬着头皮上了。以下是结合项目需求产生的部分sql写法,或许有更优解,欢迎大佬们指出。

1. 按月、周、年分组查询数据总数

select count(*) as frequency,
      to_char(O_TIME,'mm') as timeDimension
from EVENT
group by to_char(O_TIME,'mm')
select count(*) as frequency,
       to_char(O_TIME,'iw') as timeDimension
from EVENT
group by to_char(O_TIME,'iw')
select count(*) as frequency,
       to_char(O_TIME,'yyyy') as timeDimension
from EVENT
group by to_char(O_TIME,'yyyy')

2. 查询前7天数据,并且返回的时间格式为 月+日期(例:09-22)

SELECT TO_CHAR(O_TIME, 'MM-DD') AS timeDimension,
       COUNT(*) AS frequency
FROM EVENT
WHERE O_TIME >= TO_DATE(TO_CHAR(SYSDATE - 7, 'yyyy-MM-dd hh24:mi:ss'), 'yyyy-MM-dd hh24:mi:ss')
GROUP BY TO_CHAR(O_TIME, 'MM-DD')

3. 查询一个月、半年、一年前的数据(合并为1条sql写法)

SELECT
E667.*
FROM EVENT E667
<where>
<if  test="timeStampCode != null">
    AND (#{timeStampCode} = 1 AND E667.O_TIME between add_months(now(),-1)  and now())
    OR
    (#{timeStampCode} = 2 AND E667.O_TIME between add_months(now(),-1*6)  and now())
    OR
    (#{timeStampCode} = 3 AND E667.O_TIME between add_months(now(),-1*12)  and now())
</if>
</where>
order by E667.O_TIME desc

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值