과학적 표기법없이 SQL 서버에서 float를 varchar로 변환
과학적 표기법 및 소수 자릿수없이 SQL 서버에서 float를 varchar로 변환합니다.
예 :
나는 float 값이 1000.2324422 이면 동일한 1000.2324422 와 같이 varchar로 변환됩니다 .
임의의 수의 십진수 값이있을 것입니다. 부동 값은 무작위로 나옵니다.
항상 '1.67383e + 008'이 나오는 167382981과 같은 큰 정수 (float 필드에서)를 사용하여 캐스팅하거나 변환 VARCHAR(MAX)
하거나 다른 것으로 작동 하지 않았습니다 .
어떤 한 작업은했다 STR()
.
나에게도 str()
또는 cast(float as nvarchar(18))
일 하지 않았습니다 .
결국 작동하는 것은 int로 변환 한 다음 다음과 같이 nvarchar로 변환하는 것입니다.
convert(nvarchar(18),convert(bigint,float))
STR 기능이 잘 작동합니다. 몇 가지 계산을 한 후 float가 돌아 왔고 VARCHAR로 변경해야했지만 과학적 표기법 randonly도 얻었습니다. 나는 모든 계산 후에이 변형을 만들었다
ltrim(rtrim(str(someField)))
시험 CAST(CAST(@value AS bigint) AS varchar)
이것은 작동합니다 CONVERT(VARCHAR(100), CONVERT(DECIMAL(30, 15), fieldname))
이것은 소수 때문에이 특별한 경우와 관련이 없지만 제목을 구글링하는 사람들에게 도움이 될 수 있습니다. 정수 필드는 fine을 varchar로 변환하지만 float는 과학적 표기법으로 변경됩니다. 소수가없는 경우 부동 소수점을 빠르게 변경하는 매우 빠른 방법은 먼저 필드를 정수로 변경 한 다음 varchar로 변경하는 것입니다.
이 시도:
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
- DECIMAL로 캐스팅하면 이전 값이 있는지 여부에 관계없이 모든 값에 소수점이 표시됩니다.
- VARCHAR로 캐스팅하면 REPLACE 함수를 사용할 수 있습니다.
- 먼저 0을 공백으로 교체 한 다음 RTRIM을 사용하여 모든 후행 공백 (이전에는 0)을 제거한 다음 나머지 공백을 0으로 교체합니다.
- 그런 다음 마침표에 대해 동일한 작업을 수행하여 소수 값이없는 숫자를 제거합니다.
데이터를 아주 잘 테스트해야합니다. 이것은 지저분해질 수 있습니다. 다음은 단순히 값에 10을 곱한 결과의 예입니다.이를 실행하여 어떤 일이 발생하는지 확인하십시오. 내 SQL Server 2017 상자에서 세 번째 쿼리에서 *********를 얻습니다. BIGINT로 CAST하면 매번 작동합니다. 그러나 충분한 데이터를 테스트하지 않고 테스트하지 않으면 나중에 문제가 발생할 수 있으므로 최대 예상 값을 테스트하지 않는 한 모든 데이터에서 작동 할 것이라고 생각하지 마십시오.
Declare @Floater AS FLOAT =100000003.141592653
SELECT CAST(ROUND(@Floater,0) AS VARCHAR(30) ),
CONVERT(VARCHAR(100),ROUND(@Floater,0)),
STR(@Floater)
SET @Floater =@Floater *10
SELECT CAST(ROUND(@Floater,0) AS VARCHAR(30) ),
CONVERT(VARCHAR(100),ROUND(@Floater,0)),
STR(@Floater)
SET @Floater =@Floater *100
SELECT CAST(ROUND(@Floater,0) AS VARCHAR(30) ),
CONVERT(VARCHAR(100),ROUND(@Floater,0)),
STR(@Floater)
다음은 과학적 표기법없이 float 값을 변환 할 수있는 예입니다.
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, '')
In the above example, we can see that the format function is useful for us. FORMAT() function returns always nvarchar.
I have another solution since the STR() function would result some blank spaces, so I use the FORMAT() function as folowing example:
SELECT ':' + STR(1000.2324422), ':' + FORMAT(1000.2324422,'##.#######'), ':' + FORMAT(1000.2324422,'##')
The result of above code would be:
: 1000 :1000.2324422 :1000
This works:
Suppose
dbo.AsDesignedBites.XN1E1 = 4016519.564`
For the following string:
'POLYGON(('+STR(dbo.AsDesignedBites.XN1E1, 11, 3)+'...
ReferenceURL : https://stackoverflow.com/questions/6521354/convert-float-into-varchar-in-sql-server-without-scientific-notation
'programing tip' 카테고리의 다른 글
TFS 소스 제어에 솔루션을 추가 할 때“Failed to create mapping”이 표시됨 (0) | 2020.12.27 |
---|---|
객관식 Android Spinner (0) | 2020.12.27 |
객체, rvalue 참조, const 참조 간의 과부하 해결 (0) | 2020.12.26 |
단위 테스트 실행을위한 Python 패키지 구조, setup.py (0) | 2020.12.26 |
Linux에서 iOS 에뮬레이트 / 시뮬레이트 (0) | 2020.12.26 |