postgresql 按日期范围查询,出生日期推年龄(python年龄推出生日期)

一、postgresql按照日期范围查询有好几种方法,日期字段类型一般为:Timestamp without timezone

select * from user_info where create_date >= '2015-07-01' and create_date < '2015-08-15';

select * from user_info where create_date between '2015-07-01' and '2015-08-15';

select * from user_info where create_date >= '2015-07-01'::timestamp  and create_date < '2015-08-15'::timestamp;

select * from user_info where create_date between to_date('2015-07-01','YYYY-MM-DD') and to_date('2015-08-15','YYYY-MM-DD');

二、postgresql出生日期推年龄

三个基础的时间表示函数 CURRENT_DATE/CURRENT_TIME/NOW()

>SELECT CURRENT_DATE ;
>返回当前日期以 年--日(yyyy-MM-dd)的形式:
2019-05-29
>SELECT CURRENT_TIME;
>返回当日时间以 时::+时区(HH:mm:ss )的形式:
17:49:11.585308+08
>SELECT NOW();
>返回当前时间 以 年--日 时::秒(yyyy-MM-dd HH:mm:ss)的形式:
2019-01-10 17:50:45.354983+0

然后几个计算公式
第一种是直接对日期进行操作,

SELECT (CURRENT_DATE - '1993-01-01')/365 age;
SELECT (CURRENT_DATE - '1993-01-01 16:00:00')/365 age;
#输出 26 26 两种时间格式结果一致

第二种方式

SELECT age(CURRENT_DATE, '1993-01-01') age;
SELECT age(CURRENT_DATE, '1993-01-01 16:00:00') age;
#26 years 9 days
#26 years 8 days 08:00:00
#age()函数会输出精确的年龄字符串,根据传入的时间不同,输出的时间格式相对应

如果使用now()函数计算,需要注意age()函数能输出正确结果,直接计算单位为day

select (now() - '1993-01-01')/365 age;
select (now() - '1993-01-01 16:00:00')/365 age
#26 days 01:02:21.497111
#26 days 00:59:43.688958

三、python年龄推出生日期

from datetime import datetime, date, timedelta
def getBirth(age=20):
    tday = date.today()##2019-05-29
    bird_year = []
    birthday_year = tday.year - int(age)##1999
    birthday_mg = str(birthday_year) + '-' + str(datetime.now().month) + '-' + str(
        datetime.now().day)  # 这里的月份和日期是为了补全格式-1999-05-29
    birthday_full_df = datetime.strptime(birthday_mg, "%Y-%m-%d").date()  # 格式化为date格式
    bird_year.append(str(birthday_full_df))
    return bird_year#['1999-05-29']

##推出的日期可以用pgsql去查询年龄>20等范围

你可能感兴趣的:(postgres)