在没有科学记数法和修剪小数的情况下,在SQL服务器中将float转换为varchar。
代表:
我有浮动值 1000.2324422 ,然后它会被转换为varchar,就像 1000.2324422 一样。
会有任意数量的十进制值。浮点值随机出现。
答案 0 :(得分:77)
使用大整数(在浮点字段中)(例如167382981,总是出现'1.67383e + 008'),转换或转换为VARCHAR(MAX)
或 为我工作的任何其他内容。
所做的工作是STR()
。
答案 1 :(得分:37)
str()
或cast(float as nvarchar(18))
都不适合我。
最终工作的是转换为int然后转换为nvarchar,如下所示:
convert(nvarchar(18),convert(bigint,float))
答案 2 :(得分:27)
STR功能很好用。我做了一些计算后需要浮动回来,需要改为VARCHAR,但也得到了科学记法。我在所有计算之后进行了这种转换
ltrim(rtrim(str(someField)))
答案 3 :(得分:6)
尝试CAST(CAST(@value AS bigint) AS varchar)
答案 4 :(得分:2)
由于小数的原因,这与此特定情况无关,但可以帮助那些谷歌标题的人。 整数字段可以很好地转换为varchars,但浮点数会更改为科学计数法。因此,如果没有小数,快速更改浮点数的快速方法是首先将字段更改为整数,然后将其更改为varchar。
答案 5 :(得分:2)
这有效CONVERT(VARCHAR(100), CONVERT(DECIMAL(30, 15), fieldname))
答案 6 :(得分:1)
试试这个:
SELECT REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(CAST(CAST(YOUR_FLOAT_COLUMN_NAME AS DECIMAL(18,9)) AS VARCHAR(20)),'0',' ')),' ','0'),'.',' ')),' ','.') FROM YOUR_TABLE_NAME
答案 7 :(得分:1)
您可以使用此代码:
STR(<Your Field>, Length, Scale)
您的字段 = 用于转换的浮动字段
长度 = 带小数点的浮点数的总长度
Scale = 小数点后的长度数
例如:
SELECT STR(1234.5678912,8,3)
结果是:1234.568
请注意,最后一位数字也是四舍五入。
祝你好运。
答案 8 :(得分:0)
您将必须非常好地测试数据。这会变得凌乱。这是一个简单的结果示例,只需将值乘以10。运行此命令以查看会发生什么。 在我的SQL Server 2017框中,在第三个查询中,我得到一堆*********。如果您将CAST设置为BIGINT,则每次都可以使用。但是,如果您不这样做,并且没有对足够的数据进行测试,那么以后可能会遇到问题,因此请不要误以为除非您测试了最大期望值,否则它就可以对所有数据起作用。
Declare @Floater AS FLOAT =100000003.141592653
SELECT CAST(ROUND(@Floater,0) AS VARCHAR(30) ),
CONVERT(VARCHAR(100),ROUND(@Floater,0)),
STR(@Floater)
SET @Floater =@Floater *10
SELECT CAST(ROUND(@Floater,0) AS VARCHAR(30) ),
CONVERT(VARCHAR(100),ROUND(@Floater,0)),
STR(@Floater)
SET @Floater =@Floater *100
SELECT CAST(ROUND(@Floater,0) AS VARCHAR(30) ),
CONVERT(VARCHAR(100),ROUND(@Floater,0)),
STR(@Floater)
答案 9 :(得分:0)
下面是一个示例,我们可以在不使用任何科学计数法的情况下转换浮点值。
DECLARE @Floater AS FLOAT = 100000003.141592653
SELECT CAST(ROUND(@Floater, 0) AS VARCHAR(30))
,CONVERT(VARCHAR(100), ROUND(@Floater, 0))
,STR(@Floater)
,LEFT(FORMAT(@Floater, ''), CHARINDEX('.', FORMAT(@Floater, '')) - 1)
SET @Floater = @Floater * 10
SELECT CAST(ROUND(@Floater, 0) AS VARCHAR(30))
,CONVERT(VARCHAR(100), ROUND(@Floater, 0))
,STR(@Floater)
,LEFT(FORMAT(@Floater, ''), CHARINDEX('.', FORMAT(@Floater, '')) - 1)
SET @Floater = @Floater * 100
SELECT CAST(ROUND(@Floater, 0) AS VARCHAR(30))
,CONVERT(VARCHAR(100), ROUND(@Floater, 0))
,STR(@Floater)
,LEFT(FORMAT(@Floater, ''), CHARINDEX('.', FORMAT(@Floater, '')) - 1)
SELECT LEFT(FORMAT(@Floater, ''), CHARINDEX('.', FORMAT(@Floater, '')) - 1)
,FORMAT(@Floater, '')
在上面的示例中,我们可以看到format函数对我们很有用。 FORMAT()函数始终返回nvarchar。
答案 10 :(得分:0)
我有另一种解决方案,因为STR()函数会产生一些空格,因此我将FORMAT()函数用作以下示例:
id date value flag
114 2016-01-01 0 1
114 2016-02-01 0 1
114 2016-03-01 200 1
114 2016-04-01 300 0
114 2016-05-01 100 0
220 2016-01-01 0 1
220 2016-02-01 0 1
220 2016-03-01 0 1
220 2016-04-01 0 1
220 2016-05-01 400 1
220 2016-06-01 200 0
以上代码的结果将是:
SELECT ':' + STR(1000.2324422), ':' + FORMAT(1000.2324422,'##.#######'), ':' + FORMAT(1000.2324422,'##')
答案 11 :(得分:0)
尝试此代码
SELECT CONVERT(varchar(max), CAST(1000.2324422 AS decimal(11,2)))
结果:1000.23
此处小数(11,2):11位数字计数(不带点),2-小数点后两位数字
答案 12 :(得分:0)
有很多答案,但是没有一个答案足够完整,无法适应将FLOAT
转换为NVARCHAR
的情况,所以就在这里。
这就是我们最终得到的:
DECLARE @f1 FLOAT = 4000000
DECLARE @f2 FLOAT = 4000000.43
SELECT TRIM('.' FROM TRIM(' 0' FROM STR(@f1, 30, 2))),
TRIM('.' FROM TRIM(' 0' FROM STR(@f2, 30, 2)))
SELECT CAST(@f1 AS NVARCHAR),
CAST(@f2 AS NVARCHAR)
输出:
------------------------------ ------------------------------
4000000 4000000.43
(1 row affected)
------------------------------ ------------------------------
4e+006 4e+006
(1 row affected)
在我们的方案中,FLOAT
等于1美元的小数点后2位是足够的,但是您可以轻松地增加它以满足您的需求。
此外,我们需要将“ .00”修剪为整数。
答案 13 :(得分:0)
以上都不对我有用。最后,我只是用了这个:
INSERT INTO [Destination_Table_Name]([Field_Name])
SELECT CONCAT('#',CAST([Field_Name] AS decimal(38,0))) [Field_Name]
FROM [dbo].[Source_Table_Name] WHERE ISNUMERIC([CIRCUIT_NUMBER]) = 1
INSERT INTO [Destination_Table_Name]([Field_Name])
SELECT [Field_Name]
FROM [dbo].[Source_Table_Name] WHERE ISNUMERIC([CIRCUIT_NUMBER]) <> 1
答案 14 :(得分:0)
select format(convert(float,@your_column),'0.0#########')
优点:此解决方案与源数据类型(浮点、科学、varchar、日期等)无关
String
限制为 10 位数字,bigInt
去掉十进制值
答案 15 :(得分:-1)
这有效:
假设
dbo.AsDesignedBites.XN1E1 = 4016519.564`
对于以下字符串:
'POLYGON(('+STR(dbo.AsDesignedBites.XN1E1, 11, 3)+'...