T-SQL 캐스트와 변환


325

당신이 사용해야 할 때의 일반적인 지침 무엇입니까 CAST대는 CONVERT? 하나를 선택하는 것과 관련된 성능 문제가 있습니까? 하나는 ANSI-SQL에 더 가깝습니까?

답변:


339

CONVERT SQL Server에 따라 다릅니다. CAST ANSI입니다.

CONVERT날짜 등의 형식을 지정할 수 있다는 점에서 더 유연합니다. 그 외에는 거의 동일합니다. 확장 기능에 관심이 없다면CAST .

편집하다:

아래 주석에서 @beruic 및 @CF에서 언급 한 것처럼 암시 적 변환을 사용할 때 (CAST 나 CONVERT를 사용하지 않는 경우) 정밀도가 손실 될 수 있습니다. 자세한 정보는 CAST 및 CONVERT 및 특히이 그래픽 : SQL Server 데이터 유형 변환 차트를 참조하십시오 . 이 추가 정보를 통해 원래의 조언은 여전히 ​​동일합니다. 가능하면 CAST를 사용하십시오.


5
또한 정확성을 유지하기 위해 CAST를 사용해야하는 숫자 변환이 있다고 생각하지만이 정보의 신뢰할만한 출처를 찾는 데 어려움을 겪고 있습니다.
beruic

2
@beruic 맞습니다. MSDN에 정보가 있습니다. msdn.microsoft.com/en-us/library/ms187928.aspx DECIMAL과 NUMERIC 유형 간 변환시 정밀도를 유지하려면 CAST가 필요합니다.
CF

@CF이 정보는 어디에 있습니까? 나는 CAST와 CONVERT의 일반 페이지를 여는 링크를 따라 갔으며, 찾을 수있는 정밀도에 관한 유일한 정보는 과학적 표기법을 사용하는 부동 소수점 값의 변환에 관한 것입니다. 초기 의견에서 내가 틀릴 수 있습니까?
beruic

6
@beruic이 기사의 하단에있는이 그림에 관하여 i.msdn.microsoft.com/dynimg/IC170617.gif 지금은 아마 정밀도 손실이 암시 적 변환에서 발생할 수 및 중 CAST 또는 CONVERT를 사용하는 경우 발생하지 않습니다 생각 . 확실하지 않습니다 ...
CF

2
@CF 나는 그것이 명확하지 않다는 것에 동의하고, 그것에 대해 더 구체적인 문서가 분명히 있어야하므로 Microsoft가 그렇게하기를 바랍니다. 그러나 잘 발견했다 :)
beruic


12

CAST는 표준 SQL이지만 CONVERT는 방언 T-SQL에만 해당됩니다. datetime의 경우 변환에 작은 이점이 있습니다.

CAST에서는 표현식과 대상 유형을 나타냅니다. CONVERT에는 변환 스타일을 나타내는 세 번째 인수가 있으며, 문자열과 날짜 및 시간 값 사이와 같은 일부 변환에 지원됩니다. 예를 들어 CONVERT (DATE, '1/2/2012', 101)는 미국 표준을 나타내는 스타일 101을 사용하여 리터럴 문자열을 DATE로 변환합니다.



6

아직 아무도 눈치 채지 못한 것으로 보이는 것은 가독성입니다. 데…

CONVERT(SomeType,
    SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    )

…보다 이해하기 쉬울 수 있습니다…

CAST(SomeReallyLongExpression
    + ThatMayEvenSpan
    + MultipleLines
    AS SomeType
    )

2
그러나 CAST는 일반적으로 더 읽기 쉽다고 생각합니다. 긴 표현 CAST(Column1 AS int)보다 읽기가 더 논리적입니다CONVERT(int, Column1)
S.Serpooshan

4

CAST는 ANSI 표준을 사용합니다. 이식성의 경우 다른 플랫폼에서 작동합니다. CONVERT는 SQL Server에만 해당됩니다. 그러나 매우 강력한 기능입니다. 날짜에 다른 스타일을 지정할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.