과학적 표기법없이 SQL 서버에서 float를 varchar로 변환
과학적 표기법과 소수 자릿수없이 SQL 서버에서 float를 varchar로 변환합니다.
예 :
나는 float 값 1000.2324422를 가지고 동일한 1000.2324422 와 같이 varchar로 변환 됩니다.
임의의 수의 십진수 값이 될 것입니다. 부동 값은 무작위로 나옵니다.
항상 '1.67383e + 008'이 나오는 167,382,981과 같은 큰 정수 (부동 필드에서) 사용하여를 캐스팅하거나 CHAPTER 2 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))
이것은 소수 때문에 특별한 경우와 관련이 없지만 제목을 구글링하는 사람들에게 도움이 될 수 있습니다. 정수 필드는 미세을 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, '')
위의 예에서 format 함수가 유용하다는 것을 알 수 있습니다. FORMAT () 함수는 항상 nvarchar를 반환합니다.
STR () 함수로 인해 공백이 생기기 때문에 또 다른 솔루션이 있으므로 FORMAT () 함수를 다음 예제로 사용합니다.
SELECT ':' + STR(1000.2324422), ':' + FORMAT(1000.2324422,'##.#######'), ':' + FORMAT(1000.2324422,'##')
위 코드의 결과는 다음과 같습니다.
: 1000 :1000.2324422 :1000
이것은 작동합니다 :
가정
dbo.AsDesignedBites.XN1E1 = 4016519.564`
다음 문자열의 경우 :
'POLYGON(('+STR(dbo.AsDesignedBites.XN1E1, 11, 3)+'...
'ProgramingTip' 카테고리의 다른 글
TFS 소스 제어에 솔루션을 추가 할 때 "Failed to create mapping"이 표시됨 (0) | 2020.12.28 |
---|---|
객관식 Android Spinner (0) | 2020.12.28 |
Matplotlib- 일련의 선 전체에 컬러 바 추가 (0) | 2020.12.28 |
Array가 제네릭 유형이 아닌 이유는 무엇입니까? (0) | 2020.12.28 |
잠시하는 동안에 평가하는 Xcode (0) | 2020.12.28 |