Ошибка преобразования типа данных varchar в bigint при попытке объединить значения строк столбца - PullRequest
0 голосов
/ 15 апреля 2020

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

SELECT
    SUBSTRING(
        ( 
            SELECT
                ',' + id_number AS 'data()'
            FROM
                users FOR XML PATH('')
        ),
        2,
        9999
    ) AS id_numbers

Столбец id_number имеет тип varchar. Я пытался преобразовать в текст, но все еще получаю ошибки.

1 Ответ

1 голос
/ 15 апреля 2020

id_number - это bigint, вам потребуется CONVERT или CAST для типа текста:

SELECT
    SUBSTRING(
        ( 
            SELECT
                ',' + CONVERT( varchar(20), id_number ) AS 'data()'
            FROM
                users FOR XML PATH('')
        ),
        2,
        9999
    ) AS id_numbers

Если вы используете SQL Server 2017 или более поздней версии вы можете использовать STRING_AGG (MS SQL эквивалент сервера MySQL GROUP_CONCAT):

SELECT
    STRING_AGG( id_number, ', ' )

(SQL Сервер будет обрабатывать неявное bigint -то- varchar преобразование для вас, поскольку нет никакой двусмысленности, введенной использованием бинарных операторов).

...