Подтвердить что ты не робот

Конвертировать float в varchar на SQL-сервере без научной нотации

конвертировать float в varchar на SQL-сервере без научных обозначений и декомпрессии тримминга.

для Ex:

i имеет значение float 1000.2324422, тогда оно будет преобразовано в varchar как таковое 1000.2324422.

было бы любое количество десятичных значений. Значение флагов приходит случайно.

4b9b3361

Ответ 1

Кастинг или преобразование в VARCHAR(MAX) или что-то еще не работало для меня с использованием больших целых чисел (в полях с плавающей запятой), таких как 167382981, которые всегда выходили "1.67383e + 008".

Что работало STR().

Ответ 2

Ни для меня не str() или cast(float as nvarchar(18)).

Что в итоге работало, преобразовывалось в int, а затем преобразовывалось в nvarchar следующим образом:

 convert(nvarchar(18),convert(bigint,float))

Ответ 3

Функция STR работает хорошо. Я вернулась назад после выполнения некоторых расчетов и должна была перейти на VARCHAR, но также получала научную нотацию. Я сделал это преобразование после всех вычетов

 ltrim(rtrim(str(someField)))

Ответ 4

Попробуйте CAST(CAST(@value AS bigint) AS varchar)

Ответ 5

Это не относится к этому конкретному случаю из-за десятичных знаков, но может помочь людям, которые google заголовок. Целочисленные поля преобразуются в переменные в varchars, но плавающие сменяются на научную нотацию. Очень быстрый способ быстро изменить float, если у вас нет десятичных знаков, заключается в том, чтобы сначала изменить поле на целое число и затем изменить его на varchar.

Ответ 6

Это работает CONVERT(VARCHAR(100), CONVERT(DECIMAL(30, 15), fieldname))

Ответ 7

Попробуй это:

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
  1. Кастинг как DECIMAL будет устанавливать десятичную точку на каждое значение, независимо от того, было ли оно до или нет.
  2. Кастинг как VARCHAR позволяет использовать функцию REPLACE
  3. Сначала ЗАМЕНИТЕ нули с пробелами, затем RTRIM, чтобы избавиться от всех конечных пространств (ранее нулей), затем ЗАМЕНИТЕ оставшиеся пространства с нулями.
  4. Затем сделайте то же самое для периода, чтобы избавиться от него для чисел без десятичных значений.

Ответ 8

Вам нужно будет проверить свои данные ОЧЕНЬ хорошо. Это может стать беспорядочным. Вот пример результатов, просто умножив значение на 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 [email protected] *10
    SELECT CAST(ROUND(@Floater,0) AS VARCHAR(30) ), 
            CONVERT(VARCHAR(100),ROUND(@Floater,0)), 
            STR(@Floater)

    SET  @Floater [email protected] *100
    SELECT CAST(ROUND(@Floater,0) AS VARCHAR(30) ), 
            CONVERT(VARCHAR(100),ROUND(@Floater,0)), 
            STR(@Floater)

Ответ 9

Ниже приведен пример, где мы можем преобразовать значение с плавающей запятой без каких-либо научных обозначений.

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() всегда возвращает nvarchar.

Ответ 10

У меня есть другое решение, так как функция STR() приведет к пробелам, поэтому я использую функцию FORMAT() в качестве следующего примера:

SELECT ':' + STR(1000.2324422), ':' + FORMAT(1000.2324422,'##.#######'), ':' + FORMAT(1000.2324422,'##')

Результат приведенного выше кода будет:

:      1000 :1000.2324422   :1000

Ответ 12

Это работает:

предполагать

dbo.AsDesignedBites.XN1E1 = 4016519.564'

Для следующей строки:

'POLYGON(('+STR(dbo.AsDesignedBites.XN1E1, 11, 3)+'...