在没有科学记数法的情况下将float转换为SQL服务器中的varchar

Swe*_*ety 56 sql-server

在没有科学记数法和修剪小数的情况下,在SQL Server中将float转换为varchar.

对于Ex:

我有浮动值1000.2324422,然后它将被转换为varchar相同1000.2324422.

会有任意数量的十进制值.浮点值随机出现.

小智 78

铸造或转换为VARCHAR(MAX)或其他任何东西都没有,我用大整数(浮法领域)工作,如167382981,它总是出来"1.67383e + 008".

什么的工作是STR().

  • 那更好,但实际上我必须做LTRIM(STR(someField)),因为默认情况下它将返回一个VARCHAR(10),如果数字没有10位数则填充空格 (7认同)
  • 出于某种原因在sql 2008 r2上,当我在12位数值上使用STR()时,我得到了*******值.我不得不使用@Chris的方法 (4认同)

Chr*_*ris 40

无论是str()cast(float as nvarchar(18))为我工作.

最终工作的是转换为int然后转换为nvarchar,如下所示:

 convert(nvarchar(18),convert(bigint,float))
Run Code Online (Sandbox Code Playgroud)

  • 也可以选择`cast(cast(fieldname as bigint)as nvarchar(18))。 (4认同)
  • 您传递了一个浮点数(就像提问者所问的那样),但这仅适用于整数。 (3认同)

小智 28

STR功能很好用.我做了一些计算后需要浮动回来,需要改为VARCHAR,但也得到了科学记法.我在所有的计算之后做了这个转换

 ltrim(rtrim(str(someField)))
Run Code Online (Sandbox Code Playgroud)

  • 这有很大帮助.另外,请注意str的默认长度为10.因此,如果指定的固定长度varchar小于此值,它将被截断.例如:declare @x varchar(9)= str(1); 将为@x分配9个空格 (2认同)

小智 7

这有效:

CONVERT(VARCHAR(100), CONVERT(DECIMAL(30, 15), fieldname))
Run Code Online (Sandbox Code Playgroud)


小智 6

尝试 CAST(CAST(@value AS bigint) AS varchar)

  • 但这仅适用于整数,而提问者则询问浮点数。 (2认同)

小智 5

尝试这个:

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
Run Code Online (Sandbox Code Playgroud)
  1. 转换为 DECIMAL 将为每个值添加小数点,无论它之前是否有小数点。
  2. 转换为 VARCHAR 允许您使用 REPLACE 函数
  3. 首先用空格替换零,然后使用 RTRIM 删除所有尾随空格(以前的零),然后用零替换剩余空格。
  4. 然后对句点执行相同的操作,以消除没有小数值的数字。