2011-06-29 10 views
40

Konwertuj zmiennoprzecinkowe na varchar na serwerze SQL bez notacji naukowej i przycinania wartości dziesiętnych.Konwertuj zmiennoprzecinkowe na varchar na serwerze SQL bez zapisu naukowego.

do EX:

mam liczba rzeczywista 1000,2324422, to będzie przekształcony varchar tak samo 1000.2324422.

będzie miała dowolną liczbę wartości dziesiętnych. Wartość pływaka przychodzi losowo.

+0

możliwe duplikat [Dlaczego odlewania od pływaka do varchar jest zaokrąglana w SQL Server ] (http://stackoverflow.com/questions/6512046/why-casting-from-float-to-varchar-is-being-rounded-in-sql-server) – JNK

Odpowiedz

65

Casting lub konwersji do VARCHAR(MAX) czy cokolwiek innego nie robił dla mnie pracować przy użyciu dużych liczb całkowitych (w dziedzinach float), takie jak 167382981, który zawsze wyszedł „1.67383e + 008”.

Co zrobiłem pod był STR().

+4

To lepiej, ale tak naprawdę musiałem zrobić LTRIM (STR (someField)) jak domyślnie zwróci VARCHAR (10), wypełniając spacjami, jeśli liczba nie e 10 cyfr –

+0

str() pracował ... –

+3

z jakiegoś powodu na sql 2008 r2 Otrzymałem ******* wartości, gdy użyłem STR() na 12-cyfrowych wartościach. Musiałem użyć podejścia @Chris zamiast tego – Slider345

23

Funkcja STR działa poprawnie. Po wykonaniu pewnych obliczeń powróciłem i musiałem przejść na VARCHAR, ale zyskałem także naukowe notowanie. Zrobiłem tę transformację po wszystkich calcs

ltrim(rtrim(str(someField))) 
+2

To bardzo pomaga. Pamiętaj też, że domyślna długość dla str wynosi 10. Więc zostanie przycięta, jeśli przypiszesz do varchara o stałej długości mniej niż to. Na przykład: zadeklaruj @ x varchar (9) = str (1); przypisuje 9 spacji do @x – andyb

+0

Dołączyłem pole do str (pola) i wszystko działa idealnie. Dzięki :) –

+0

tak, używam tego samego rozwiązania, ale także precyzję taką jak w tym poście: http://stackoverflow.com/questions/3715675/how-to-convert-float-to-varchar-in-sql -server – elle0087

31

Ani str() lub cast(float as nvarchar(18)) pracował dla mnie.

Co zrobił skończyć pracę została konwersji do int a następnie konwersję do nvarchar tak:

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

'cast (obsada (nazwa pola jako bigint) jako nvarchar (18))' również byłaby opcją. –

1

To nie ma znaczenia dla tego konkretnego przypadku, ponieważ z miejscami po przecinku, ale może pomóc ludziom, którzy google nagłówek. Pola całkowite konwertują się dobrze na varchary, ale zmienne zmieniają się na notację naukową. Bardzo szybkim sposobem na szybką zmianę wartości zmiennoprzecinkowej, jeśli nie masz przecinków, jest zatem zmiana pola najpierw na liczbę całkowitą, a następnie zmiana jej na wartość varchar.

0

Spróbuj CAST(CAST(@value AS bigint) AS varchar)

Powiązane problemy