【问题标题】:SQL Error using using XML Path Method, Error converting data type varchar to float使用 XML 路径方法的 SQL 错误,将数据类型 varchar 转换为浮点数时出错
【发布时间】:2016-01-07 12:01:36
【问题描述】:

我正在尝试使用 XML 路径方法获取逗号分隔字符串

表格:

CREATE TABLE [dbo].[tbl_BankList](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [INST_ID] [bigint] NULL,
    [TITLE] [varchar](50) NULL,
    [ADDRESS_LINE1] [varchar](50) NULL,
    [CITY] [varchar](50) NULL,
    [STATE_CODE] [varchar](50) NULL,
    [ZIP] [varchar](50) NULL,
    [LOCATION_ID] [varchar](50) NULL,
    [ALOC] [varchar](50) NULL,
)

CREATE TABLE [dbo].[tbl_BankRTN](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [INST_ID] [bigint] NULL,
    [RTN] [float] NULL,
)

查询:

SELECT  bl.INST_ID,
  STUFF((SELECT distinct ',' + BR.[RTN]
         FROM tbl_BankRTN BR
         WHERE bl.INST_ID = BR.INST_ID
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)')
        ,1,1,'') RTN
FROM tbl_BankList bl;

错误 - 消息 8114,级别 16,状态 5,行 1 转换数据类型时出错 varchar 浮动。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    使用CAST:

    SELECT  bl.INST_ID,
      STUFF((SELECT distinct ',' + CAST(BR.[RTN] AS VARCHAR(1000))
             FROM tbl_BankRTN BR
             WHERE bl.INST_ID = BR.INST_ID
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)')
            ,1,1,'') RTN
    FROM tbl_BankList bl;
    

    或者如果SQL Server 2012+CONCAT函数:

    SELECT  bl.INST_ID,
      STUFF((SELECT distinct CONCAT(',', BR.[RTN])
             FROM tbl_BankRTN BR
             WHERE bl.INST_ID = BR.INST_ID
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)')
            ,1,1,'') RTN
    FROM tbl_BankList bl;
    

    编辑:

    为了避免科学格式用STR 包裹浮点数:

    返回从数字数据转换而来的字符数据。

    STR ( float_expression [ , length [ , decimal ] ] )

    SELECT  bl.INST_ID,
      STUFF((SELECT distinct ',' +  STR(BR.[RTN], 10,3)
             FROM tbl_BankRTN BR
             WHERE bl.INST_ID = BR.INST_ID
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)')
            ,1,1,'') RTN
    FROM tbl_BankList bl;
    

    【讨论】:

    • 是的,但是为什么我要采用这种格式 - 1.07002e+008,1.07005e+008
    • @SachinPrasad 使用STR
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    相关资源
    最近更新 更多