PARSE함수는 문자열에서 날짜/시간 및 숫자 형식으로 변환할 경우에 사용한다.
TRY가 붙은 함수는 형변환 오류가 생겼을 때, NULL값을 반환한다.
CONVERT(), PARSE() TRY가 붙지 않은 함수는 오류가 생겼을 때 오류 메세지가 뜬다.
CAST( 표현식 AS 데이터형식 [길이] ) CONVERT( 데이터형식 [길이], 표현식 [, 스타일] ) TRY_CONVERT (데이터형식 [길이], 표현식 [, 스타일]) PARSE (문자열 AS 데이터 형식) TRY_PARSE (문자열 AS 데이터 형식)
CREATE TABLE PRODUCTS(
NAME VARCHAR(20),
PRICE INT,
AMOUNT INT
);
GO
INSERT PRODUCTS VALUES('제품1', 500, 3);
INSERT PRODUCTS VALUES('제품2', 1000, 20);
INSERT PRODUCTS VALUES('제품3', 1500, 100);
INSERT PRODUCTS VALUES('제품4', 200, 70);
INSERT PRODUCTS VALUES('제품5', 50, 15);
INSERT PRODUCTS VALUES('제품6', 700, 9);
INSERT PRODUCTS VALUES('제품7', 80, 26);
INSERT PRODUCTS VALUES('제품8', 100, 40);
INSERT PRODUCTS VALUES('제품9', 200, 11);
INSERT PRODUCTS VALUES('제품10', 500, 20);
INSERT PRODUCTS VALUES('제품11', 300, 10);
INSERT PRODUCTS VALUES('제품12', 2000, 2);
SELECT * FROM PRODUCTS;
SELECT AVG(AMOUNT) AS [제품 평균 수량] FROM PRODUCTS;
SELECT AVG(CAST(AMOUNT AS FLOAT)) AS [제품 평균 수량] FROM PRODUCTS;
SELECT AVG(CONVERT(FLOAT, AMOUNT)) AS [제품 평균 수량] FROM PRODUCTS;
SELECT AVG(TRY_CONVERT(FLOAT, AMOUNT)) AS [제품 평균 수량] FROM PRODUCTS;
CASTING함수를 이용하여 FLOAT으로 형변환할 경우 소숫점까지 표현된다.
SELECT price, amount, price/amount AS [단가/수량]
FROM products;
SELECT price, amount, CAST(CAST(price AS FLOAT)/amount AS DECIMAL(8,2)) AS [단가/수량]
FROM products;
DECIMAL ?
SELECT TRY_PARSE('111.12313' AS INT);
소숫점인 자료에 PARSE( '' AS INT)를 쓰면 에러가 발생한다.
SELECT TRY_PARSE('111.12313' AS INT);
SELECT TRY_PARSE('111.12313' AS FLOAT);
문자형타입의 변수 + '200'
: 문자 + 문자 (형변환이 이루어지지 않음)
''
로 둘러싸여있어 문자이다.
문자형타입의 변수 + 200
: 문자 + 정수 (암시적 형변환: 정수로 형변환 됨)
문자형타입의 변수 +100.12
: 문자 +실수 (암시적 형변환: 실수로 형변환 됨)
CAST(문자형타입의 변수 AS INT) + 200 ; --> 정수로 변환 후에 연산
SELECT CAST(125.123 AS NCHAR(5));
125.123
은 7자리이므로NCHAR(5)
로 설정할 경우 오류가 발생한다.
SELECT CAST(1231.123 AS INT); 는 정상 출력되나,
SELECT CAST('01231.123' AS INT);'
으로 숫자 담을 시 오류가 발생한다.
SELECT CAST(1231.123 AS INT);
강의: ms sql 2014 제대로 배우기 1