我在SQLServer的一列中有一个10个字符的长度值。我需要以固定长度拆分该列,删除前导零,并在每个值后面添加一个-。我能够通过使用子字符串将值拆分并将其转换为int。它工作得很好。
然而,当我试图连接它是失败的。如果你能帮忙,我将不胜感激。
SELECT TOP 1 R.COL1, CAST(SUBSTRING(R.COL1,1,1) AS int) AS F1,CAST(SUBSTRING(R.COL1,2,5) AS int) AS F2,CAST(SUBSTRING(R.COL1,7,4) AS int) AS F3 CAST(SUBSTRING(R.COL1,1,1) AS int) +'-' +CAST(SUBSTRING(R.COL1,2,5) AS int) +'-' + CAST(SUBSTRING(R.COL1,7,4) AS int) AS finalString FROM MYTABLE R
如果col1的值是1012950001,那么我期望的finalstring是1-1295-1,但是我从上面的查询得到的结果是1297,因为它添加了所有的值。如果你能帮忙,我将不胜感激。
2条答案
按热度按时间kpbwa7wx1#
你不能使用
+
具有数字数据类型和varchar
无法隐式转换为该数据类型的。像这样的1 + 'a'
也不管用'a'
不是一个int
,并且不能隐式转换为。如果要混合数据类型,则使用
CONCAT
,它隐式地将每个部分转换为(n)varchar
:lfapxunr2#
你可以用
concat
方法来连接子字符串值这会给你预期的结果
'1-1295-1'