在 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
作为前缀
还有一条评论 - 看起来你改变了价值观的位置 - 你的右边在左边,左边的在右边 - 可能正是你需要但想提及的
我正在尝试 运行 一个查询,在该查询中我合并了两列并用 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
作为前缀还有一条评论 - 看起来你改变了价值观的位置 - 你的右边在左边,左边的在右边 - 可能正是你需要但想提及的