我有两个表claims
,它有ptid,date_entered(date(,customer_details
,它有ptd,first_transaction_date(varchar(。claims
表中输入的日期格式为YYYY-MM-DD,customer_details
表中的first_transaction_date格式为YYYYMM。
目标:对于索赔表中所有唯一的ptid,我想找出first_transaction_date和date_entered之间的天数差异。我想看看在进入奖励计划之前的一年、两年里,系统中有哪些客户。
我遇到以下问题:1.不同的数据类型2.格式化的差异
这就是我所拥有的:
drop table if exists claims_1;
select a.* , b.diag_min, diag_min - first_month_active::date as start_dif
into claims_1
from claims as a
left join customer_details as b on a.ptid = b.ptid
where start_dif >= 0 and end_dif >= 0;
当我尝试使用str_to_date转换数据类型时,我会得到以下错误:
(500310(无效操作:函数str_to_date(字符变化,"未知"(不存在;
select date_format(str_to_date(first_month_active, '%Y%m'), '%Y-%m')from customer_details
在postgresql中,要将字符串转换为日期,请使用to_date
:
SELECT to_date('20190103','YYYYMMDD');
所以你需要
SELECT to_date(first_month_active, 'YYYYMM') from customer_details
而且,要将日期格式化为字符串,您需要to_char
,所以最终查询将是
SELECT to_char(to_date(first_month_active, 'YYYYMM'), 'YYYY-MM') from customer_details