2017-07-20 24 views
0

我写的PostgreSQL以下命令:PostgreSQL相关的错误“YYYY; - 数值应该是整数

create table Daily_Winners as (
    select d.* from 
    (
     select row_number() over(partition by "request_date", 
               "revised_circle" 
           order by "earned_score" desc, 
              "count_of_attempts" asc) rn, 
       * 
     from 
     (
      select a.*,b.count_of_attempts, last_que_attempt 
      from 
      (
       select msisdn, revised_circle, 
         to_date(left(a.request_date,10),'yyyy-mm-dd')request_date, 
         sum(cast(score as numeric(10,0))) Earned_Score 
       from Airtel_season13_circles_final a 
       where upper(a.ans_type)='CA' 
       group by Revised_Circle, 
         to_date(left(a.request_date,10),'yyyy-mm-dd'), 
         msisdn 
      )a 
      join 
      (
       select distinct revised_circle, 
         to_date(left(a.request_date,10),'yyyy-mm-dd')request_date, 
         msisdn, 
         count(distinct transaction_id) count_of_attempts, 
         max(to_timestamp(request_date, 'YYYY-MM-DD HH24:MI:SS')::timestamp without time zone)last_que_attempt 
       from Airtel_season13_circles_final a 
       group by revised_circle, 
         to_date(left(a.request_date,10),'yyyy-mm-dd'), 
         msisdn 
      )b 
      on a.msisdn=b.msisdn and a.revised_circle=b.revised_circle 
      and a.request_date=b.request_date 
     )c 
    )d 
    where d.rn<=20) 

这样做的执行给了我以下错误:

ERROR: invalid value "requ" for "yyyy"
DETAIL: Value must be an integer.

谁能请帮助这个?任何建议将不胜感激。谢谢。

回答

0

看起来你的字段request_date是一个文本,并且至少有一行4个最左边的字符不是4个数字,而是字符串REQU。

当您尝试将字符串转换为日期,指定格式,并没有与格式兼容值您指定

- >您必须过滤你的坏数据,或者解决您的字符串精确度,甚至更好,将日期保存在date字段中。

相关问题