[sql] SQL Server에서 소수점 이하 자르기 (둥근 아님)

반올림하지 않고 SQL에서 소수점 이하 자릿수를 자르거나 삭제하는 가장 좋은 방법을 결정하려고합니다. 예를 들면 다음과 같습니다.

declare @value decimal(18,2)

set @value = 123.456

이것은 자동으로 라운드 할 @value수하는 123.46대부분의 경우 좋은이다. 그러나이 프로젝트에는 필요하지 않습니다. 필요하지 않은 소수를 자르는 간단한 방법이 있습니까? left()함수를 사용하고 십진수로 다시 변환 할 수 있다는 것을 알고 있습니다 . 다른 방법이 있습니까?



답변

select round(123.456, 2, 1)


답변

ROUND ( 123.456 , 2 , 1 )

세 번째 매개 변수 ! = 0 일 때 반올림하지 않고 잘립니다.

http://msdn.microsoft.com/en-us/library/ms175003(SQL.90).aspx

통사론

ROUND ( numeric_expression , length [ ,function ] )

인수

  • numeric_expression
    비트 데이터 유형을 제외한 정확한 숫자 또는 대략적인 숫자 데이터 유형 범주의 표현식입니다.

  • length
    numeric_expression을 반올림 할 정밀도입니다. length는 tinyint, smallint 또는 int 유형의 표현식이어야합니다. length가 양수인 경우 numeric_expression은 length로 지정된 소수 자릿수로 반올림됩니다. length가 음수이면 numeric_expression은 length로 지정된 소수점 왼쪽에서 반올림됩니다.

  • function
    수행 할 작업 유형입니다. 함수는 tinyint, smallint 또는 int 여야합니다. 함수가 생략되거나 값이 0 (기본값)이면 numeric_expression이 반올림됩니다. 0 이외의 값을 지정하면 numeric_expression이 잘립니다.

답변

SELECT Cast(Round(123.456,2,1) as decimal(18,2))


답변

자르고 둥글게하지 않는 방법은 다음과 같습니다.

select 100.0019-(100.0019%.001)

100.0010을 반환

그리고 당신의 예 :

select 123.456-(123.456%.001)

123.450을 반환

이제 끝나는 0을 제거하려면 간단히 캐스트하십시오.

select cast((123.456-(123.456%.001)) as decimal (18,2))

123.45를 반환


답변

실제로 세 번째 매개 변수가 0 또는 1 또는 2이면 값을 반올림하지 않습니다.

CAST(ROUND(10.0055,2,0) AS NUMERIC(10,2))


답변

라운드는 선택적 매개 변수가 있습니다

Select round(123.456, 2, 1)  will = 123.45
Select round(123.456, 2, 0)  will = 123.46


답변

소수점을 원하십니까?

그렇지 않은 경우

select ceiling(@value),floor(@value)

0으로하면 라운드를 수행하십시오.

select round(@value,2)