在BigQuery中使用CONCAT时发生错误

时间:2019-04-10 10:30:35

标签: sql google-bigquery standard-sql

我正在尝试运行一个查询,在该查询中,我将两列合并,并在两者之间用 x 进行分隔。

我还试图从同一张表中获取其他一些列。但是,出现以下错误。

  

错误:对于参数类型:FLOAT64,FLOAT64,功能CONCAT没有匹配的签名。支持的签名:CONCAT(STRING,[STRING,...]); CONCAT(字节,[字节,...])。

这是我的代码:

SELECT
  CONCAT(right,'x',left),
  position,
  numbercreated,
  Madefrom
FROM
  table
WHERE
Date = "2018-10-07%"

我也尝试过放一个演员,但这没用。

SELECT Concast(cast(right,'x',left)), position,... SELECT Concast(cast(right,'x',left)as STRING), position,...

为什么会出现此错误? 有没有修复? 感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您需要在concat()之前强制转换每个值:

SELECT CONCAT(CAST(right as string), 'x', CAST(left as string)),
       position, numbercreated, Madefrom
FROM table
WHERE Date = '2018-10-07%';

如果要使用特定格式,请使用FORMAT()函数。

我还怀疑您的WHERE是否会匹配任何内容。如果Date是字符串,那么您可能需要LIKE

WHERE Date LIKE '2018-10-07%';

更有可能,您应该使用DATE函数或直接比较:

WHERE DATE(Date) = '2018-10-07'

或:

WHERE Date >= '2018-10-07' AND
      Date < '2018-10-08'

答案 1 :(得分:0)

使用safe_cast,如下所示:

SELECT
    CONCAT(SAFE_CAST( right as string ),'x',SAFE_CAST(left as string)),
    position,
    numbercreated,
    Madefrom
FROM
    table
WHERE
    Date = '2018-10-07'

答案 2 :(得分:0)

解决CONCAT问题的另一种方法是使用FROMAT函数,如以下示例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 1.01 AS `right`, 2.0 AS `left`
)
SELECT FORMAT('%g%s%g', t.right, 'x', t.left)
FROM `project.dataset.table` t  

结果将是

Row f0_  
1   1.01x2  

注意:在上述特定示例中-您可以使用更简单的语句

FORMAT('%gx%g', t.right, t.left)    

您可以看到更多支持formats

的信息。

一些建议-尽量不要将关键字用作列名/别名。如果出于某些原因使用了-用反引号将其包装或在其前面加上表名/别名

还有另一条评论-好像您在切换值位置-您的右侧在左侧,左侧在右侧-可能正是您需要的,但想提及