【问题标题】:Error converting data type varchar to bigint when trying to concatenate column row values尝试连接列行值时将数据类型 varchar 转换为 bigint 时出错
【发布时间】:2020-04-15 12:05:56
【问题描述】:

我使用以下查询将列的行值连接成单个值。

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

id_number 列是 varchar 类型。我试图转换为文本,但仍然出现错误。

【问题讨论】:

  • 您为什么使用 SQL Server 2008?它不再受支持。为什么要将完美的 varchar() 更改为已弃用的 text?
  • 等待基础设施升级!由于服务器仅在内部网络上,因此不被视为优先事项

标签: sql tsql sql-server-2008


【解决方案1】:

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

If you're using SQL Server 2017 or later you can use STRING_AGG(MS SQL Server 相当于 MySQL 的GROUP_CONCAT):

SELECT
    STRING_AGG( id_number, ', ' )

(SQL Server 将为您处理隐式 bigint-to-varchar 转换,因为使用二元运算符不会引入歧义)。

【讨论】:

  • 目前仅限于sql server 2008 :-(
  • @Sql_Pete_Belfast,很高兴您找到了有用的答案。请考虑通过单击左侧的灰色复选标记来接受答案。它会奖励回答的人一些声望点,你也会得到一些。
猜你喜欢
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多