У меня есть столбец с плавающей запятой с числами разной длины, и я пытаюсь преобразовать их в varchar.
Некоторые значения превышают максимальный размер bigint, поэтому я не могу сделать что-то подобное
cast(cast(float_field as bigint) as varchar(100))
Я пробовал использовать десятичные числа, но числа не одинакового размера, так что это тоже не помогает
CONVERT(varchar(100), Cast(float_field as decimal(38, 0)))
Любая помощь приветствуется.
ОБНОВИТЬ:
Примерное значение: 2.2000012095022E + 26 .
sql-server-2008
hgulyan
источник
источник
cast(float_field as varchar(max))
иначе я не понимаю вопросаОтветы:
Попробуйте воспользоваться
STR()
функцией.STR () Функция
Еще одно примечание: это прокладки слева с пробелами. Если это проблема, совместите с
LTRIM
:источник
Select LTRIM(Str(float_field, 38, 0))
ваших данных работает?Str
функции. Количество цифр после десятичной точки. Вы прочитали ссылку, которую я разместил? Измените ноль на 10.Select LTRIM(Str(float_field, 38, 10))
Единственный бит запроса, который я обнаружил, который возвращает ТОЧНО такое же исходное число, это
См. Http://www.connectsql.com/2011/04/normal-0-microsoftinternetexplorer4.html
Другие решения, приведенные выше, иногда округляют или добавляют цифры в конце
ОБНОВЛЕНИЕ : в соответствии с комментариями ниже и тем, что я вижу в https://msdn.microsoft.com/en-us/library/ms187928.aspx :
Следует использовать в новых версиях SQL Server (База данных SQL Azure и начиная с SQL Server 2016 RC3)
источник
0
значения с плавающей запятой, конвертируемого как0.0E0
. Мне нужно было преобразовать поле с плавающей запятой так,varchar
как мне нужно отображать,NA
когдаNULL
и0
как оно есть. Я добился этого, добавивCASE
оператор в запрос, как показано ниже;CASE WHEN float_field IS NULL THEN 'NA' WHEN float_field = 0 THEN '0' ELSE CONVERT(VARCHAR, float_field, 128) END AS float_As_VChar
это решение, которое я в конечном итоге использовал в sqlserver 2012 (поскольку все другие предложения имели недостаток в виде усечения дробной части или какой-либо другой недостаток).
вывод:
у этого есть дополнительное преимущество (в моем случае), чтобы упростить разделитель тысяч и локализацию:
вывод:
источник
Полезная тема спасибо.
Если вы хотите, как я, удалить нулевые лидеры, вы можете использовать это:
источник
поплавок имеет только макс. точность до 15 цифр. Следовательно, цифры после 15-й позиции случайны, и преобразование в bigint (макс. 19 цифр) или десятичное число вам не поможет.
источник
Это может помочь без округления
источник
Преобразуйте
integer
сначала в, а затем вstring
:источник
Попробуйте это, должно работать:
источник
Если вы используете функцию CLR, вы можете преобразовать float в строку, которая выглядит так же, как float, без лишних нулей в конце.
Функция CLR
,
пример
,
Вывод
,
Предостережение
Все преобразованные строки обрезаются до 18 знаков после запятой, и конечные нули отсутствуют. 18 знаков точности для нас не проблема. И 100% наших чисел FP (около 100 000 значений) выглядят как строковые значения так же, как в базе данных как числа FP.
источник
Немного изменен ответ Акселя, так как в некоторых случаях он будет давать нежелательные результаты.
источник
из документации REPLACE () :
тесты:
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
источник
Выберите
приведение (замените (convert (decimal (15,2), acs_daily_debit), '.', ',') Как varchar (20))
из acs_balance_details
источник
На основании молекулярного ответа:
источник
Я столкнулся с похожей ситуацией и был удивлен проблемами округления «очень больших чисел», представленными в SSMS v17.9.1 / SQL 2017.
Я не предполагаю, что у меня есть решение, однако я заметил, что FORMAT представляет число, которое кажется правильным. Я не могу сказать, что это уменьшает дальнейшие проблемы округления или полезно в сложной математической функции.
T SQL-код, который должен четко продемонстрировать мои наблюдения, позволяя другим при необходимости тестировать свой код и идеи.
источник
это лучший способ, чтобы вы не добавляли
.0000
никаких цифр в конце значения.источник