[sql-server-2008] SQL Server에서 float를 varchar로 변환하는 방법

길이가 다른 부동 열이 있고 varchar로 변환하려고합니다.

일부 값은 bigint 최대 크기를 초과하므로 다음과 같이 할 수 없습니다

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

십진수를 사용하려고 시도했지만 숫자의 크기가 같지 않으므로 도움이되지 않습니다.

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

도움을 주시면 감사하겠습니다.

최신 정보:

샘플 값은 2.2000012095022E + 26 입니다.



답변

STR()기능을 사용해보십시오 .

SELECT STR(float_field, 25, 5)

STR () 함수


또 다른 참고 사항 : 왼쪽에 공백이 있습니다. 이것이 문제라면 다음과 결합하십시오 LTRIM.

SELECT LTRIM(STR(float_field, 25, 5))


답변

정확한 원래 번호를 반환하는 유일한 쿼리 비트는 다음과 같습니다.

CONVERT (VARCHAR(50), float_field,128)

http://www.connectsql.com/2011/04/normal-0-microsoftinternetexplorer4.html을 참조 하십시오

위의 다른 솔루션은 때로는 끝에 숫자를 반올림하거나 추가합니다.

업데이트 : 아래 의견과 https://msdn.microsoft.com/en-us/library/ms187928.aspx 에서 볼 수있는 내용 :

CONVERT (VARCHAR(50), float_field,3)

새 SQL Server 버전에서 사용해야합니다 (Azure SQL Database 및 SQL Server 2016 RC3부터).


답변

이것은 sqlserver 2012에서 사용했던 솔루션입니다 (다른 모든 제안은 분수 부분 또는 다른 단점을 자르는 단점이 있기 때문에).

declare @float float = 1000000000.1234;
select format(@float, N'#.##############################');

산출:

1000000000.1234

이것은 수천 가지 구분 기호와 현지화를 쉽게 할 수있는 또 다른 이점이 있습니다 (제 경우).

select format(@float, N'#,##0.##########', 'de-DE');

산출:

1.000.000.000,1234


답변

유용한 주제 감사합니다.

Leading zero를 제거하고 싶다면 다음을 사용할 수 있습니다.

DECLARE @MyFloat [float];
SET @MyFloat = 1000109360.050;
SELECT REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE(STR(@MyFloat, 38, 16), '0', ' '))), ' ', '0'),'.',' ')),' ',',')


답변

float 에는 최대 값 만 있습니다. 15 자리의 정밀도. 따라서 15 번째 자리 이후의 숫자는 임의이므로 bigint (최대 19 자리) 또는 10 진수로 변환해도 도움이되지 않습니다.


답변

반올림하지 않고 도움이 될 수 있습니다

declare @test float(25)

declare @test1 decimal(10,5)

select @test = 34.0387597207
select @test
set @test1 = convert (decimal(10,5), @test)
select cast((@test1) as varchar(12))


Select  LEFT(cast((@test1) as varchar(12)),LEN(cast((@test1) as varchar(12)))-1)


답변

integer첫 번째 로 변환 한 다음 다음으로 변환하십시오 string.

cast((convert(int,b.tax_id)) as varchar(20))