Concat与SQL Server中的转换

时间:2019-03-22 00:21:47

标签: sql sql-server

我正在尝试将5列合并为一列,听起来很简单,但是要合并到该列的结果表是varchar,现在我尝试了 this和{{3} }似乎无效。

这是我的代码:

INSERT INTO [RepositoryCoSD].dbo.AnimalProducts
    SELECT 
        [DataSeriesID]
        , concat_ws(CONVERT(INT,
            CASE
               WHEN IsNumeric(CONVERT(VARCHAR(12), DataSeriesID)) = 1 
                  THEN CONVERT(VARCHAR(12), DataSeriesID)
                  ELSE 0 
            END) , '-', '-')
        ,[CommodtiySubCommodityID]
        ,[Commodity]
        ,[SubCommodity]
        ,[SectorID]
        ,[Sector]
        ,[GroupID]
        ,[GroupName]
        ,[StatisticTypeID]
        ,[StatisticType]
        ,[SourceID]
        ,[Source]
        ,[SourceDescription]
        ,[PhysicalAttributeTypeID]
        ,[PhysicalAttributeType]
        ,[PhysicalAttributeDesc]
        ,[UtilizationPracticeID]
        ,[UtilizationPractice]
        ,[ProductionPracticeID]
        ,[ProductionPractice]
        ,[SourceSeriesID]
        ,[TimeID]
        ,[TimeFrequency]
        ,[Date]
        ,[GeographyID]
        ,[GeographyType]
        ,[City]
        ,[County]
        ,[State]
        ,[Region]
        ,[Country]
        ,[UnitID]
        ,[Unit]
        ,[LifecyclePhaseID]
        ,[LifecyclePhaseDescription]
        ,[Value] 
    FROM 
        AnimalProductsCoSD.CoSD.Public_Standard_View 

我需要合并5列UnitID, GeoID, TimeID, LifecyclePhaseIDDataseriesID

我收到此错误

  

将varchar值'-132-'转换为数据类型int时转换失败。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

请参阅CONCAT_WS here

的语法
  

CONCAT_WS(分隔符,参数1,参数2 [,参数N] ...)

尝试将您的声明改写为

CONCAT_WS('-',CONVERT(VARCHAR(10),UnitID), CONVERT(VARCHAR(10),GeoID), CONVERT(VARCHAR(10),TimeID), CONVERT(VARCHAR(10),LifecyclePhaseID), CONVERT(VARCHAR(10),DataseriesID))

答案 1 :(得分:0)

您尝试过concat()吗?

CONCAT(UnitID, GeoID, TimeID, LifecyclePhaseID, DataseriesID)

它将自动将其参数转换为字符串。与使用显式转换相比,这有点混乱。

您也可以添加其他字符:

CONCAT(UnitID,'-',GeoID,'-',TimeID,'-',LifecyclePhaseID,'-',DataseriesID)

答案 2 :(得分:0)

实际上是

     concat_ws(CONVERT(INT,
                CASE
                WHEN IsNumeric(CONVERT(VARCHAR(12), DataSeriesID)) = 1 THEN CONVERT(VARCHAR(12),DataSeriesID)
                ELSE 0 END) ,'-','-') 

行应排在第一位,因为在结果表中,合并列必须排在最前面,对此感到抱歉