#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'