人大金仓 / MySQL / 达梦 时间查询 ,获取近几天、一周、一月、季度、一年时间内的数据,两个日期相差多少年、月、日
·
一、获取近几天、一周、一月、一年时间内的数据
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、范围查询:
- and:
'时间字段'>='2021-12-12' and '时间字段' <= '2021-12-12'
- between:
'时间字段' between '2021-12-12' and '2021-12-12'
- 含时分秒时使用
TO_TIMESTAMP('时间字段', 'yyyy-mm-dd HH24:MM:SS')
扩展参考:https://www.cnblogs.com/liuxiutianxia/p/9957391.html
更多推荐
已为社区贡献4条内容
所有评论(0)