문제

Sql Server 2005에서 T-Sql만 사용한다는 제약 조건을 고려할 때 varchar(여기서는 암시적으로)로 변환한 다음 소수점을 바꾸는 것보다 Money 데이터 유형에서 소수점을 제거하는 더 좋은 방법이 있습니까?

현재 내가 가지고 있는 것은 다음과 같습니다.

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')

원하는 123과 1999를 반환하지만 더 좋은 방법이 있는지 궁금합니다.이견있는 사람?

도움이 되었습니까?

해결책

100을 곱한 다음 int로 변환합니다.

다른 팁

금전적 가치를 저장하기 위해 절대로 돈 데이터 유형을 사용해서는 안 됩니다.계산을 하면 잘린 결과가 나옵니다.무슨 뜻인지 보려면 다음을 실행하세요.

DECLARE
@mon1 MONEY,
@mon2 MONEY,
@mon3 MONEY,
@mon4 MONEY,
@num1 DECIMAL(19,4),
@num2 DECIMAL(19,4),
@num3 DECIMAL(19,4),
@num4 DECIMAL(19,4)

SELECT
@mon1 = 100, @mon2 = 339, @mon3 = 10000,
@num1 = 100, @num2 = 339, @num3 = 10000

SET @mon4 = @mon1/@mon2*@mon3
SET @num4 = @num1/@num2*@num3

SELECT @mon4 AS moneyresult,
@num4 AS numericresult

산출:2949.0000 2949.8525

사용 사례에 대해 좀 더 구체적으로 설명해주실 수 있나요?표현에서 소수점을 제거하는 것은 척도에 대한 모든 정보를 잃게 된다는 점을 고려하면 약간 특이한 일입니다.항상 두 자리 숫자가 있다고 가정합니까?그렇다면 100을 곱한 다음 문자열로 변환하기 전에 반올림하는 것을 단순화할 수 있습니다.

화폐 데이터 유형에는 소수점 이하 최대 4자리까지 포함될 수 있습니다.두 자리 이상의 값은 원래 솔루션이나 x100 트릭에서 예상대로 작동하지 않을 수 있습니다.

마법은 다음과 같습니다.

DataFormatString="{0:c0}

그러면 소수점 이하 자릿수가 제거됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top