在 BigQuery 中使用 CONCAT 时出错

Getting an error when using CONCAT in BigQuery

我正在尝试 运行 一个查询,在该查询中我合并了两列并用 x 将它们分开。

我还试图从同一个 table 中获取一些其他列。但是,我收到以下错误。

Error: No matching signature for function CONCAT for argument types: FLOAT64, FLOAT64. Supported signatures: CONCAT(STRING, [STRING, ...]); CONCAT(BYTES, [BYTES, ...]).

这是我的代码:

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,...

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

尝试如下使用 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'

您需要在 之前 转换每个值 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'

解决 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可以看到更多

很少有建议 - 尽量不要使用关键字作为列 names/aliases。如果出于某种原因你确实使用了 - 用反引号包裹或用 table name/alias

作为前缀

还有一条评论 - 看起来你改变了价值观的位置 - 你的右边在左边,左边的在右边 - 可能正是你需要但想提及的