쉼표가있는 문자열 숫자 값을 소수 구분 기호로 NUMERIC (10, 2)로 변환 포함 된 varchar 열의

그리스어 형식의 숫자가 포함 된 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_PARSEUSING 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


답변