SQL Server 의 데이터 형식 암시 적 변환 문제
CREATE TABLE TEST
(
ID INT,
GOOD_TYPE VARCHAR(12),
GOOD_WEIGHT NUMERIC(18,2)
)
INSERT INTO dbo.TEST
VALUES( 1, 'T1',1.27)
SELECT GOOD_TYPE,
CASE WHEN ( GOOD_TYPE = 'T1' ) THEN 99.1 + SUM(GOOD_WEIGHT)
ELSE CEILING(SUM(GOOD_WEIGHT))
END AS GrossWeight ,
SUM(GOOD_WEIGHT) AS NetWeight
FROM dbo.TEST
GROUP BY GOOD_TYPE;
위 에서 보 듯 이 왜
99.1 + SUM(GOOD_WEIGHT)
100 이 되 었 습 니까?원시 SQL 은 매우 복잡 합 니 다.우 리 는 여러 가지 요 소 를 분석 하고 제거 한 후에 요령 을 터득 하지 못 했 습 니 다.여러 가지 고생 속 에서 이렇게 전환 하면(아래 캡 처 참조)괜 찮 습 니 다.나중에 분석 한 결과 CASE WHEN 안의 서로 다른 데이터 유형 이 암시 적 인 전환 을 초래 한 것 같 습 니 다.솔직히 CASE WHEN 에 데이터 유형의 잠재 적 인 전환 이 존재 하 는 지 주의 하지 않 았 습 니 다.그런데 왜 꼭 NUMERIC 에서 INT 로 바 뀌 었 을까요?INT 가 아니 라 NUMERIC 로 바 뀌 었 습 니 다.솔직히 관련 문서 의 공식 을 보지 못 했 습 니 다.만약 에공식 문서:서로 다른 데이터 형식의 표현 식 을 연산 자로 조합 한 후 우선 순위 가 낮은 데이터 형식 은 우선 우선 우선 순위 가 높 은 데이터 형식 으로 변환 합 니 다.이 변환 이 지원 하 는 암시 적 변환 이 아니라면 오 류 를 되 돌려 줍 니 다.같은 데이터 형식의 연산 자 를 조합 할 때 연산 결 과 는 이 데이터 형식 입 니 다.
그리고 우 리 는 알 고 있 습 니 다.그러나 진짜
Decimal
아직 잘 모 르 고 정확도 요구 가 높 은 보고서 에서 이런 현상 은 Bug 와 같은 갑 작 스 러 운 현상 이 나타난다.조심해 야 돼!참고 자료:
https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-2017
https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/data-type-conversion-database-engine?view=sql-server-2017
총결산
위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 SQL Server 의 데이터 형식 암시 적 전환 문제 입 니 다.여러분 께 도움 이 되 셨 으 면 합 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깊이 중첩된 객체를 정확히 일치 검색 - PostgreSQL목차 * 🚀 * 🎯 * 🏁 * 🙏 JSON 객체 예시 따라서 우리의 현재 목표는 "고용주"사용자가 입력한 검색어(이 경우에는 '요리')를 얻고 이 용어와 정확히 일치하는 모든 사용자 프로필을 찾는 것입니다. 즐거운 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.