我有三个字段,我试图连接成一个大字段。其中两个字段是varchar,但其中一个是浮点数。在某些情况下,连接字段显示科学记数法。连接字段应该是varchar并显示三个字段的组合,而不管它们的格式如何。当我只是连接两个varchar字段,当值包含所有数字时,我甚至看到科学记数法。为什么会发生这种情况,我该如何解决?以下是我尝试进行连接的一些示例:
Field1 = e.DocumentNo + e.Assignment + CAST(CAST([Amount in LC] as int) as nvarchar(50))
Field2 = CAST(e.DocumentNo + e.Assignment as varchar(255))
我也尝试过使用CONVERT,它没有提供预期的结果。 DocumentNo是varchar(255),Assignment是varchar(255),但当我分别为5115146916和1610000分别设置这些值时,Field2看起来像5.11515E + 16.
我还尝试将CONCAT()与字段一起使用,它会产生相同的不良结果。
答案 0 :(得分:1)
你走了:
IF OBJECT_ID('TEMPDB..#ConcatData','U') IS NOT NULL
DROP TABLE #ConcatData;
CREATE TABLE #ConcatData(
[Amount in LC] [float] NULL,
[Assignment] [varchar](255) NULL,
[DocumentNo] [varchar](255) NULL)
INSERT INTO #ConcatData
VALUES
(-27.08, '20120295', '4820110172'),
(10625451.5124, '20140701', '4810122475'),
(205.5, 'TPE035948900001', '8200022827'),
(10000000, 'TPE035948900001', '8200022827')
SELECT DOCUMENTNO +
ASSIGNMENT +
CASE WHEN RIGHT(str([amount in lc],50,4),4) = '0000'
THEN ltrim(LEFT(str([amount in lc],50,4),LEN(str([amount in lc],50,4))-5))
WHEN RIGHT(str([amount in lc],50,4),3) = '000'
THEN ltrim(LEFT(str([amount in lc],50,4),LEN(str([amount in lc],50,4))-3))
WHEN RIGHT(str([amount in lc],50,4),2) = '00'
THEN ltrim(LEFT(str([amount in lc],50,4),LEN(str([amount in lc],50,4))-2))
WHEN RIGHT(str([amount in lc],50,4),1) = '0'
THEN ltrim(LEFT(str([amount in lc],50,4),LEN(str([amount in lc],50,4))-1))
ELSE ltrim(str([amount in lc],50,4))
END
FROM #ConcatData
此处故事的道德,float
不是您的列的正确数据类型。我实际上不知道float
何时是正确的数据类型...
无论如何,需要使用令人讨厌的CASE
语句来删除由STR()
引起的多余的小数位零。你甚至可能需要更多,但这最多可以覆盖4位小数,我想你会明白这一点。
一个注意事项,第一个THEN
删除了5个字符而不是4个。这也包括.
。
输出:
482011017220120295-27.08
48101224752014070110625451.5124
8200022827TPE035948900001205.5
8200022827TPE03594890000110000000