我正在尝试运行一个查询,在该查询中,我将两列合并,并在两者之间用 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,...
为什么会出现此错误? 有没有修复? 感谢您的帮助。
答案 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
的信息。一些建议-尽量不要将关键字用作列名/别名。如果出于某些原因使用了-用反引号将其包装或在其前面加上表名/别名
还有另一条评论-好像您在切换值位置-您的右侧在左侧,左侧在右侧-可能正是您需要的,但想提及