连接并向sql中的整数列添加字符

svgewumm  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(308)

我在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,因为它添加了所有的值。如果你能帮忙,我将不胜感激。

kpbwa7wx

kpbwa7wx1#

你不能使用 + 具有数字数据类型和 varchar 无法隐式转换为该数据类型的。像这样的 1 + 'a' 也不管用 'a' 不是一个 int ,并且不能隐式转换为。
如果要混合数据类型,则使用 CONCAT ,它隐式地将每个部分转换为 (n)varchar :

CONCAT({Numerical Expression},'a',{Other varchar Expression})
lfapxunr

lfapxunr2#

你可以用 concat 方法来连接子字符串值

select 
concat(CAST(SUBSTRING('1012950001',1,1) AS int), '-', 
CAST(SUBSTRING('1012950001',2,5) AS int), '-', 
CAST(SUBSTRING('1012950001',7,4) AS int)) AS finalString

这会给你预期的结果 '1-1295-1'

相关问题