Как конвертировать float в varchar в SQL Server - PullRequest
115 голосов
/ 15 сентября 2010

У меня есть столбец с числами разной длины, и я пытаюсь преобразовать их в varchar.

Некоторые значения превышают максимальный размер bigint, поэтому я не могу сделать что-то подобное

cast(cast(float_field as bigint) as varchar(100))

Я пробовал использовать десятичную дробь, но числа не одного размера, так что это тоже не помогает

CONVERT(varchar(100), Cast(float_field as decimal(38, 0)))

Любая помощь приветствуется.

UPDATE:

Пример значения 2.2000012095022E + 26 .

Ответы [ 14 ]

0 голосов
/ 20 сентября 2017

На основании ответа молекулы:

DECLARE @F FLOAT = 1000000000.1234;
SELECT @F AS Original, CAST(FORMAT(@F, N'#.##############################') AS VARCHAR) AS Formatted;

SET @F = 823399066925.049
SELECT @F AS Original, CAST(@F AS VARCHAR) AS Formatted
UNION ALL SELECT @F AS Original, CONVERT(VARCHAR(128), @F, 128) AS Formatted
UNION ALL SELECT @F AS Original, CAST(FORMAT(@F, N'G') AS VARCHAR) AS Formatted;

SET @F = 0.502184537571209
SELECT @F AS Original, CAST(@F AS VARCHAR) AS Formatted
UNION ALL SELECT @F AS Original, CONVERT(VARCHAR(128), @F, 128) AS Formatted
UNION ALL SELECT @F AS Original, CAST(FORMAT(@F, N'G') AS VARCHAR) AS Formatted;
0 голосов
/ 09 октября 2014

Выберите
приведение (заменить (преобразовать (десятичное число (15,2), acs_daily_debit), '.', ',') как varchar (20))

от acs_balance_details

0 голосов
/ 23 апреля 2014
select replace(myFloat, '', '')

из ЗАМЕНА () документации :

Возвращает nvarchar, если один из входных аргументов имеет тип данных nvarchar; в противном случае REPLACE возвращает varchar.
Возвращает NULL, если один из аргументов равен NULL.

Тесты:
null ==> [NULL]
1,11 ==> 1,11
1.10 ==> 1.1
1,00 ==> 1
0,00 ==> 0
-1.10 ==> -1.1
0,00001 ==> 1e-005
0,000011 ==> 1,1e-005

0 голосов
/ 16 мая 2013

Немного изменен ответ Акселя, так как в некоторых случаях это приведет к нежелательным результатам.

DECLARE @MyFloat [float];
SET @MyFloat = 1000109360.050;

SELECT REPLACE(RTRIM(REPLACE(REPLACE(RTRIM((REPLACE(CAST(CAST(@MyFloat AS DECIMAL(38,18)) AS VARCHAR(max)), '0', ' '))), ' ', '0'),'.',' ')),' ','.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...