Получение ошибки при использовании CONCAT в BigQuery

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

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

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

Почему я получаю эту ошибку? Есть ли исправления? Спасибо за помощь.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
1 562
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Спасибо. Решил проблему!

Ahmed 10.04.2019 13:20

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

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

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

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

Другие вопросы по теме