sql中的常见的时间函数

目录

最近产品妈妈的一个需求是,统计近7天,近一个月,近6个月的用户行为次数?看上去是一个非常简单的需求,一开始查函数查错了方向

select current_date() # 当前时间
select current_date()-1 # 20180529 **慎用** 因为之前之后的时间有专门的时间
 
select  DATE_FORMAT(current_date()-1, '%Y-%m-%d') # 2018-05-29。 按照既定格式输出数据
 
select  DATE_FORMAT(current_date()-31, '%Y-%m-%d') # 空
 
select  DATE_FORMAT(date_sub(current_date(), interval 1 day), '%Y-%m-%d') # 2018-05-29 过去一天
 
select  DATE_FORMAT(date_sub(current_date(), interval 31 day), '%Y-%m-%d')  # 2018-04-29 过去一个月
 
select  DATE_SUB(current_date, INTERVAL 35 DAY)  #  2018-04-25 过去n天

DATE_FORMAT这个主要是更改时间的输出格式

使用python中的datatime可以自定义常见的一些时间函数

def date_sub(date, day_num):
        date = time.strptime(date, '%Y%m%d')
        date = datetime.datetime(date[0], date[1], date[2])
        return (date - datetime.timedelta(days=day_num)).strftime('%Y%m%d'). # 这个是py中的

def date_add(date, day_num):
        date = time.strptime(date, '%Y%m%d')
        date = datetime.datetime(date[0], date[1], date[2])
        return (date + datetime.timedelta(days=day_num)).strftime('%Y%m%d')

def dt_format_transform(dt):
        return datetime.datetime.strptime(dt, '%Y%m%d').strftime('%Y-%m-%d')

def get_day(cur_date=date.today(), delta=0):
        """获取当前日期
        input:
            cur_date: date类型, 默认为当天
            delta: 偏移量, 当天为0, 昨天为-1, 明天为1
        ouput:
            day_id: string
        """
        return (cur_date+timedelta(days=delta)).strftime('%Y%m%d')