一、获取近几天、一周、一月、一年时间内的数据

1、近10天
//人大金仓
AlarmDate >= now() - interval '10 day'

//达梦、MySQL
DATE_SUB(curdate(), INTERVAL '10' DAY) <= AlarmDate 
2、近一周
//人大金仓
AlarmDate >= now() - interval '1 week'

3、近一月
//人大金仓
AlarmDate >= now() - interval '1 month'

//达梦、MySQL
DATE_SUB(curdate(), INTERVAL '1' MONTH) <= AlarmDate 
4、近一年
//人大金仓
AlarmDate >= now() - interval '1 year'

//达梦、MySQL
DATE_SUB(curdate(), INTERVAL '1' YEAR) <= AlarmDate 
5、取当前时间本季度、上一季度
// -- mysql、达梦
//本季度
select QUARTER(current_date) as quar; // 2022-04-22 => 2
//上一季度
DATE_SUB(current_date, INTERVAL '1' QUARTER);

// -- 人大金仓 
// 查询字段 
SELECT EXTRACT(QUARTER FROM current_date) as quar ; //2022-10-8 => 4.0
//具体时间时
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2022-10-1') as quar ; //4.0
// 查询本季度 Date为时间字段
select * from tablename where EXTRACT(QUARTER FROM  Date) = EXTRACT(QUARTER FROM  current_date) ;
// 查询上一季度 Date为时间字段
select * from tablename where EXTRACT(QUARTER FROM  Date) = EXTRACT(QUARTER FROM  current_date) - 1 ;

MySQL — DATA_SUB:菜鸟教程 https://www.runoob.com/sql/func-date-sub.html

二、SQL返回两个日期间相差多少年、月、日

1、达梦(或者使用timestampdiff,详看第3点)
# 达梦 DATEDIFF选择月类型时只计算年-月相差多少个月(返回整数),而忽略是几号,其它类型同理
# 年
 select DATEDIFF(YEAR, '2001-06-01', DATE '2002-01-01');//1
# 月
 select DATEDIFF(MONTH, '2001-06-01', DATE '2002-01-01');//43
# 日
 select DATEDIFF(DAY, '2001-06-01', DATE '2002-01-01');//214

在这里插入图片描述

2、人大金仓
# 人大金仓 
# 月
SELECT months_between(to_date('2023-01-14','yyyy-mm-dd'),to_date('2022-10-12','yyyy-mm-dd')); //3.064516129032258
# 年 
SELECT trunc(months_between(to_date('2023-01-14','yyyy-mm-dd'),to_date('2022-10-12','yyyy-mm-dd'))/12); //0
# 日
SELECT days_between(to_date('2023-01-14','yyyy-mm-dd'),to_date('2022-10-12','yyyy-mm-dd'));//92
# or
SELECT to_date('2023-01-14','yyyy-mm-dd')-to_date('2022-10-12','yyyy-mm-dd');//92

在这里插入图片描述
注:trunc 截断函数,向0靠近直接将截断位置后面的数据除去,mysql中没有这个函数。
在这里插入图片描述

3、MySQL
# 参数可选 year/MONTH/QUARTER/DAY/HOUR/MINUTE/SECOND
# 时间范围 年月日时分秒
# 年
select  timestampdiff(year, "2001-06-01 00:00:00","2002-01-01 00:00:00");//0
# 月
select  timestampdiff(month, "2001-06-01","2002-01-01");//7
# 日
select  timestampdiff(day, "2001-06-01","2002-01-01");//214

三、SQL返回某个时间前后多少年/月/日的时间

1、mysql/达梦
DATE_ADD(date,INTERVAL expr type) 

expr 可以为字段名(需要数字类型),type 可选 year、month、day、week、hour、minute、second

DATE_ADD('2022-12-12 12:13:22',INTERVAL 1 year) // 2023-12-12 12:13:22 其中
2、人大金仓
ADD_MONTHS(expr1 日期/时间类型, expr2 INT)

ADD_MONTHS('2022-12-12',1*12) // 2023-12-12

ADD_MONTHS('2022-12-12',1) // 2023-01-12

date '2022-12-12' + 1 // 2022-12-13

在这里插入图片描述

四、日期查询

1、单个日期查询:
to_date('时间字段','yyyy-mm-dd') = '2021-10-26'
//今日
to_date('时间字段','yyyy-mm-dd') = current_date


curdate()  // '2020-11-11' , 
now()    //  '2020-11-11 11:11:11' ,
CURTIME() //  '11:11:11',
current_date // '2020-11-11' 

三个数据库时间转换使用函数:

//MySQL:
convert(Date,'转换为的数据类型') //Date可为输入时间
//或
date_format('转换值','%Y-%m-%d %H:%i:%s') //Date可为输入时间

//达梦:
to_char(Date,'YYYY-MM-DD HH24:MI:SS') //Date可为输入时间
//或
to_date(Date,'YYYY-MM-DD HH24:MI:SS') //Date可为输入时间
//或
date_format(Date,'%Y-%m-%d %H:%i:%s') //Date可为输入时间

//人大金仓:
to_date(Date,'YYYY-MM-DD HH24:MI:SS') //Date可为输入时间
//或
to_char(Date,'YYYY-MM-DD HH24:MI:SS') 
2、MySQL / 达梦 / postgreSQL 获取年、月、日
//Mysql/达梦:函数year(),month(),day(),QUARTER()取年份、月份、日期、季度 (week()数据库执行返回值不一致,不做参考)
//如:
select year(now()) //=>2022

//人大金仓:
select to_char(now(),'YYYY')  //=>2022
select to_char(now() - interval '1 year','YYYY')  //=>2021 上一年
3、范围查询:
  1. and:
'时间字段'>='2021-12-12' and '时间字段' <= '2021-12-12'
  1. between:
'时间字段' between '2021-12-12' and '2021-12-12'
  1. 含时分秒时使用
TO_TIMESTAMP('时间字段', 'yyyy-mm-dd HH24:MM:SS')

扩展参考:https://www.cnblogs.com/liuxiutianxia/p/9957391.html

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐