为什么我的查询给出“错误的双精度值”错误?

时间:2019-09-26 17:07:17

标签: sql google-bigquery

我正在尝试对电话代表的总通话时间(five9__five9handletime__c)求和,并计算与联系人关联的任务数。

每当我尝试在不使用CAST的情况下运行查询时,都会出现错误,因为它是STRING。但是,当我将其投射到FLOAT64时,出现“错误的双精度值”错误。然后,当我SAFE_CAST到INT64或FLOAT64时,它将值返回为NULL。

SELECT
  ap.id AS action_plan,
  SUM(SAFE_CAST(t.five9__five9handletime__c AS INT64)),
  COUNT(t.id) AS calls_made
FROM
  tack_v2.contact c
INNER JOIN tack_v2.action_plan ap ON ap.contact__c = c.id
INNER JOIN reference.tsl_ops_roster r ON ap.ownerid = r.salesforce_id_18
  AND SAFE_CAST(r.team_end_date AS DATE) = '2999-12-31'
INNER JOIN tack_v2.task t ON t.whoid = c.id
WHERE t.activitydate BETWEEN '2019-06-01' AND '2019-09-30'
  AND t.five9__five9handletime__c IS NOT NULL
GROUP BY ap.id

期望结果显示与每个 contact.id 关联的 5 ____ 5ivehandletime__c 的总数和 t.id 的计数。

1 个答案:

答案 0 :(得分:1)

很显然,您的数据中有错误的值。您可以使用以下方法找到它们:

select t.five9__five9handletime__c
from tack_v2.task t
where safe_cast(t.five9__five9handletime__c as int64) is null and
      t.five9__five9handletime__c is not null;

然后,您需要修复数据/逻辑。

道德:不要将数字值存储为字符串。