답변:
( 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
VARCHAR
, NVARCHAR
, CHAR
, 및 NCHAR
유형. 경우에 따라 기본값은 30이고 다른 경우에는 1이며, 유지 관리 불가능하고 오류가 발생하기 쉬운 코드를 만듭니다. 2) 를 사용할 때 정확한 레이아웃이 필요하지 않습니다 #
. #
모든 자릿수 중 하나만 (예 :) 천 단위 구분 기호는 필요하지 않으며, 두 자릿수는 쉼표 (예 :)로 구분 #,#
하여 모든 숫자 와 천 단위 구분 기호를 가져와야합니다. 따라서 SELECT CONVERT(VARCHAR(20), FORMAT(123456789.0258, N'#,#.00', N'de'));
제안하는 것과 동일한 출력을 반환합니다.