그리스어 형식의 숫자가 포함 된 varchar 열의 SQL 테이블이 있습니다 (. 천 단위 구분 기호 및 소수점 구분 기호로 쉼표로)
고전적인 전환
CONVERT(numeric(10,2),REPLACE([value],',','.'))
때문에 작동하지 않습니다. (천 단위 구분자) 변환을 종료
예를 들어보십시오
CONVERT(numeric(10,2),REPLACE('7.000,45',',','.'))
그런 값을 숫자로 변환하고 싶습니다 (10,2)
처리 방법에 대한 제안 사항이 있습니까?
답변
( SQL Server 2012 이상 을 사용하는 경우보다 깔끔한 접근 방법은 @wBob의 답변 을 참조하십시오 . 아래 답변에 설명 된 방법은 SQL Server 2008 R2 이상을 사용하는 경우에만 필요합니다. )
NUMERIC
쉼표, 마침표 또는 공백인지에 관계없이으로 변환 할 때 천 단위 구분 기호가 필요하지 않거나 원하지 않으므로 먼저 제거하십시오. 그런 다음 쉼표를 마침표 / 십진수로 변환하면 완료됩니다.
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
보고:
7000.45
완벽을 기하기 위해 나는 또한 시도했다는 것을 언급해야합니다.
-
SET LANGUAGE Greek;
-
CONVERT의 다양한 형식 스타일을보고 있지만 여기에는 적용되지 않습니다.
-
포맷 기능을하지만, 입력 유형 (그래서 SQL 서버 2008 R2에 적용 할 이상하지 그리고 그것은 SQL 서버 2012에 도입 된 것으로,) 숫자 또는 날짜 / 시간 / 날짜 값이어야합니다.
그리고 아무것도 작동하지 않는 것 같습니다. 나는 두 번의 REPLACE
전화 보다 더 우아한 것을 찾고 있었지만 지금까지 그런 행운은 없습니다.
또한 순수한 T-SQL 솔루션은 아니지만 SQLCLR을 통해이 작업을 수행 할 수도 있습니다. 그리고 String_TryParseToDecimal 이라는 SQL # 라이브러리 (필자가 쓴) 에이 작업을 수행하는 사전 완료 함수가 있습니다. 이 기능은 무료 버전에서 사용할 수 있으며 SQL Server 2005부터 모든 버전의 SQL Server에서 작동합니다.
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
보고:
7000.45000000000000000000
답변
어떤 버전의 SQL Server를 사용하고 있습니까? SQL Server 2012부터는 TRY_PARSE 를 USING culture
인수 와 함께 사용할 수 있습니다 . PARSE 를 사용할 수도 있습니다 PARSE
. 변환에 실패하면 차이 가 발생 하고을TRY_PARSE
반환합니다 NULL
.
DECLARE @t TABLE ( x VARCHAR(10) )
INSERT INTO @t
VALUES ( '7.000,45' ), ( 'xxx' )
SELECT x,
TRY_PARSE( x AS NUMERIC(10,2) USING 'El-GR' ) x
FROM @t
HTH
답변
내 경우에는 다음 코드가 작동했습니다.
select convert(varchar,FORMAT(123456789.0258,'###,###,###.00','de-de'))
출력 : 123.456.789,03