时间点和时间段
时间点函数
- now() 是精确到年月日 时分秒,
2019-06-01 01:19:11 - curdate() 是精确到年月日,
2019-06-01 - last_day(now()) 能够求出本月的最后一天,
2019-06-30。 - date_format 时间格式化,
date_format(now(), '%Y-%m-%d %H:%i%S')时间点
今天
昨天select curdate();
select date_sub(curdate(), interval 1 day);
找到数据库中昨天的调用记录:
select * from company_trade_journal
where date_format(create_at, '%Y-%m-%d') = date_sub(curdate(), INTERVAL 1 day)
and company_uuid='xxxxx';
本月 1 日
select date_format(now(), '%Y-%m-01');
本月月份
select date_format(now(), '%m');
本月最后一天
select last_day(now());
上个月的今天
select date_sub(curdate(), interval 30 day);
前 n 年/月/日
select curdate();
select date_sub(curdate(), interval n day/week/month/year);
n 年/月/日 后
date_add(curdate(), INTERVAL 7 DAY)
时间段
近 n 天, 包括今天
时间大于前 n 天即可
time > date_sub(curdate(), interval n day/week/month/year);
时间比较
时间可以使用字符串来比较的。
以天为单位进行比较时,精确到时分秒的时间需要先截取。
select * from company_trade_journal
where service='model_service' and
date(create_at) >= '2019-05-24'
and company_uuid='xxxxx';
在比较时间时,一定要保证他们都是同一个单位的。
比如 2019-05-24 和 2019-05-24 12:04:03 这就是两个维度的时间。
犯下的错误,就是 create_at 这个时间精确到秒, between … and … 两个维度的时间精确到天。结果就犯错了。
create or replace view product_called_times_monthly_summary as select
date_format(date_sub(curdate(), INTERVAL 30 DAY), '%Y-%m-01 %H:%i:%s') AS 'start_time'
, date_format(last_day(date_sub(curdate(), INTERVAL 30 DAY)), '%Y-%m-%d 24:00:00') AS 'end_time',
c.name as 'company_name',
round(c.balance/100, 2) as 'company_balance',
round(sum(t.cost)/100, 2) as 'company_cost'
from company_trade_journal as t
join company as c
on t.company_uuid = c.uuid
where
date_format(t.create_at, '%Y-%m-%d') BETWEEN date_format(date_sub(curdate(), INTERVAL 30 DAY), '%Y-%m-01') AND last_day(date_sub(curdate(), INTERVAL 30 DAY))
group by t.company_uuid;
时间函数
截取日期
select date(now());
> 2019-05-28
时间与其他数据类型相互转化
与字符串相互转化
时间转化为字符串, date_format
date_format(now(),"%Y-%m-%d %H")字符串转化为时间, str_to_date
str_to_date('2018-02-05 12:07:09', "%Y-%m-%d %H")datetime 与 时间戳互相转化
转化为时间戳
unix_timestamp(now())时间戳转化为 datetime
from_unixtime(unix_timestamp(now()))
pg
时间->字符串
SELECT *, to_char( last_update, 'DD-MON-YYYY') as re_format from actor;
