- CAST (expression AS 데이터형식 [(길이)])
- CONVERT (데이터형식 [(길이)], expression [, 스타일])
- -- Amount가 정수이기에, AVG값을 소수로 표현하기 위해 1.0을 곱하였다.
- -- 이게 암시적 형 변환
- SELECT ID, AVG(Amount * 1.0) AS AmountAvg FROM BuyTable
- GROUP BY ID
- -- CAST 함수를 통한 명시적 형 변환
- SELECT ID, AVG(CAST(Amount AS FLOAT)) AS AmountAvg FROM BuyTable
- GROUP BY ID
- -- CONVERT 함수를 통한 명시적 형 변환
- SELECT ID, AVG(CONVERT(FLOAT, Amount)) AS AmountAvg FROM BuyTable
- GROUP BY ID
- -- Price, Amount 모두 정수형이기에, Price/Amount 역시 정수형.
- -- 따라서 정확히 표현되지 않고, 소수점 이하가 모두 잘린다.
- SELECT Price, Amount, Price/Amount AS [단가/수량] FROM BuyTable
- -- 이를 우선 실수형으로 표현해 보자
- -- CAST 함수를 사용
- SELECT Price, Amount, CAST(Price AS FLOAT) / Amount AS [단가/수량] FROM BuyTable
- -- CONVERT 함수를 사용
- SELECT Price, Amount, CONVERT(FLOAT, Price) / Amount AS [단가/수량] FROM BuyTable
- -- CAST 함수를 한번 더 사용하여, 전체 결과값을 DECIMAL 형식으로 변환한다
- SELECT Price, Amount, CAST(CAST(Price AS FLOAT) / Amount AS DECIMAL(10, 2)) AS [단가/수량]
- FROM BuyTable
- -- CONVERT 함수를 한번 더 사용하여, 전체 결과값을 DECIMAL 형식으로 변환한다
- SELECT Price, Amount, CONVERT(DECIMAL(10, 2), CONVERT(FLOAT, Price) / Amount) AS [단가/수량]
- FROM BuyTable
- 날짜와 시간의 형식을 갖춘 문자열을 DATETIME 또는 SMALLDATETIME으로
- DATETIME 또는 SMALLDATETIME을 문자열 데이터 형식으로
- 또는 FLOAT, REAL, MOMEY, SMALLMONEY 등을 문자열 형식으로
- SELECT
- -- GETDATE()는 현재 날짜/시간을 DATETIME 형식으로 얻어온다.
- GETDATE() AS UnconvertedDateTime,
- -- GETDATE()의 결과를
- CAST(GETDATE() AS NVARCHAR(30)) AS UsingCast,
- -- 126 스타일은 ISO8601 형식이며 포맷은 다음과 같다
- -- yyyy-mm-ddThh:mi:ss.mmm(공백 없이)
- CONVERT(NVARCHAR(30), GETDATE(), 126) AS UsingConvertTo_ISO8601
- DECLARE @CharVar CHAR(3)
- SET @CharVar = '100'
- -- 문자 + 문자 = 문자
- SELECT @CharVar + '200'
- -- 문자 + 정수 = 정수 (문자열이 정수로 변환된 뒤 계산된다)
- SELECT @CharVar + 200
- -- 문자 + 실수 = 실수 (문자열이 실수로 변환된 뒤 계산된다)
- SELECT @CharVar + 200.0
- DECLARE @CharVar CHAR(3)
- SET @CharVar = '100'
- -- 같은 타입이므로 굳이 형 변환이 필요 없다.
- SELECT @CharVar + '200'
- -- CAST를 통한 방법
- SELECT CAST(@CharVar AS INT) + 200
- SELECT CAST(@CharVar AS DECIMAL(5,1)) + 200.0
- -- CONVERT를 통한 방법
- SELECT CONVERT(INT, @CharVar) + 200
- SELECT CONVERT(DECIMAL(5,1), @CharVar) + 200.0
- DECLARE @DecimalVar DECIMAL(10,5)
- SET @DecimalVar = 10.12345
- -- 10.12345를 문자로 표현하려면 8글자가 필요한데
- -- 변환 대상은 CHAR(5)로 버퍼가 부족하게 된다
- SELECT CAST(@DecimalVar AS CHAR(5))
- DECLARE @DecimalVar DECIMAL(10,5)
- SET @DecimalVar = 10.12345
- SELECT CAST(@DecimalVar AS CHAR(8))
- DECLARE @DecimalVar DECIMAL(10,5)
- SET @DecimalVar = 10.12345
- -- 정수로 변환되면서 소수점 이하 값이 모두 잘림
- SELECT CONVERT(INT, @DecimalVar)
- -- 같은 실수형으로 변환되었지만, 소수점 2 자리값 까지만 보존됨
- SELECT CONVERT(DECIMAL(5,2), @DecimalVar)
원본 링크 : http://sweeper.egloos.com/3001863
'공부방 > DB' 카테고리의 다른 글
[MS-SQL] SELECT ~ INTO, INSERT ~ INTO (0) | 2015.03.16 |
---|---|
[MS-SQL] LOCK에 관해서 (2) | 2014.10.10 |
[MS-SQL] 테이블 명, 컬럼명 변경하기 (0) | 2014.07.04 |
[DB] 서버정보 보기 (0) | 2013.12.13 |
[MS-SQL] 숫자+문자로 정렬하기 (0) | 2013.11.25 |