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

#sql #google-bigquery #bigquery-standard-sql

#sql #google-bigquery

Вопрос:

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

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

Ошибка: нет совпадающей подписи для функции CONCAT для типов аргументов: FLOAT64, FLOAT64. Поддерживаемые подписи: CONCAT(СТРОКА, [СТРОКА, …]); 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,...

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

Ответ №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. Спасибо. Решена проблема!

Ответ №2:

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

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

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

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

Ответ №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'