Получение ошибки при использовании CONCAT в BigQuery - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь выполнить запрос, в котором я объединяю два столбца и разделяю их между x .

Я также пытаюсь получить некоторые другие столбцы из той же таблицы.Тем не менее я получаю следующую ошибку.

Ошибка: нет соответствующей подписи для функции CONCAT для типов аргументов: FLOAT64, FLOAT64.Поддерживаемые подписи: CONCAT (STRING, [STRING, ...]);КОНКАТ (БАЙТЫ, [БАЙТЫ, ...]).

Вот мой код:

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 ]

1 голос
/ 10 апреля 2019

Вам нужно привести каждое значение до 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'
0 голосов
/ 11 апреля 2019

Другой вариант решения проблемы с 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)    

Вы можете узнать больше о поддержке форматов

Несколько рекомендаций - старайтесь не использовать ключевые слова в качестве имен / псевдонимов столбцов.Если по какой-то причине вы используете - оберните это с помощью backtick или добавьте префикс с именем / псевдонимом таблицы

Еще один комментарий - похоже, что вы поменяли позиции значений - ваш правый находится слева, а левый включенверно - может быть именно то, что вам нужно, но хотел бы упомянуть

0 голосов
/ 10 апреля 2019

Попробуйте, как показано ниже, используя 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'
...