Ошибка при агрегации из-за конвертации из varchar в bigint - PullRequest
0 голосов
/ 31 мая 2019

Ситуация:

Я хочу собрать значение из таблицы, но получаю следующую ошибку:

Ошибка преобразования типа данных varchar в большой int.

Я читал бесчисленное множество различных решений в Интернете, но, похоже, они не решают его.

Текущий запрос; Исходя из сообщения об ошибке, я просто добавил функцию CAST, но она все еще не работает.

SELECT
    base.target_date AS target_date
  , base.game_id AS game_id                                                                                                 
  , base.device AS device
  , ISNULL(CAST(SUM(use_point.point) AS bigint),0) AS result                     
FROM 
    cte AS base

LEFT JOIN cte2 AS use_point         
    ON base.target_date = use_point.target_date 
    AND base.game_id = use_point.device
    AND base.device = use_point.device

GROUP BY
    base.target_date 
  , base.device 
  , base.game_id
WITH ROLLUP
GO

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Используйте TRY_CAST() вместо.И это должно быть аргументом для SUM():

SELECT base.target_date, base.game_id, base.device,
       COALESCE(SUM(TRY_CAST(use_point.point as bigint)), 0) as result
FROM . . .

Обратите внимание, что псевдонимы столбцов являются избыточными, поскольку вы назначаете псевдонимы по умолчанию.

Вам также следует исправить данные,Не храните числовые значения в виде строк.Чтобы найти неверные данные, вы можете использовать:

select points
from use_points
where try_convert(points as bigint) is null and
      points is not null;
2 голосов
/ 31 мая 2019

Я предполагаю, что use_point.point - это VARCHAR, и в этом случае просто измените место, где вы ставите выражение CAST:

, ISNULL(SUM(CAST(use_point.point AS bigint)), 0) AS result                     

Обратите внимание, что CAST теперь происходит раньшеSUM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...