#sql #google-bigquery
#sql #google-bigquery
Вопрос:
Я пытаюсь извлечь определенные строки, где код столбца соответствует одному из целых чисел в списке:
SELECT DISTINCT *
FROM `detail_table`
WHERE Date BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN UNNEST([36516, 152])
Однако я получаю сообщение об ошибке:
google.api_core.исключения.BadRequest: 400 Нет совпадающей подписи для оператора В UNNEST для типов аргументов: СТРОКА, МАССИВ
Что я должен сделать, чтобы это заработало? Когда это строки, тогда это работает нормально, но я должен фильтровать по целым числам.
Комментарии:
1. Является
Code
строковым представлением целых чисел? Если это так, вы могли быCAST(Code AS INT64)
.2. Код действительно является строкой, я думал, что это число, поскольку в нем были только цифры, но таблица была сохранена в виде строки… вот почему
Ответ №1:
Вместо этого используйте приведенное ниже
#standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN UNNEST(['36516', '152'])
или
#standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND CAST(Code AS INT64) IN UNNEST([36516, 152])
Или даже просто (зависит от вашего случая)
#standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN ('36516', '152')