我正在尝试将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, LifecyclePhaseID
和DataseriesID
我收到此错误
将varchar值'-132-'转换为数据类型int时转换失败。
有什么想法吗?
答案 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) ,'-','-')
行应排在第一位,因为在结果表中,合并列必须排在最前面,对此感到抱歉