블로그 이미지
정홍주
Azure에 대한 내용뿐만 아니라 새로운 트렌드로 빅데이터, BI, SharePoint, 앱 등의 내용을 다룹니다.

calendar

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Notice

2012.04.11 08:30 SQL

SQL Server 2012 T-SQL : 변환함수

 

이번에도 .NET 프로그래밍에서와 유사한 변환 함수를 한번 알아보도록 하겠습니다.

먼저 참조 링크는 아래와 같습니다.

http://msdn.microsoft.com/ko-kr/library/hh230993(v=sql.110).aspx

 

.NET 프로그래밍에서의 변환 CONVERT 함수는 아래와 같습니다. Parse, TryParse, Convert 등의 클래스나 메서드가 있습니다. 예를 들면 아래와 같습니다.

string s = "9000";

int price = Int32.Parse(s);

int price2 = 0;

if (Int32.TryParse(s, price2))

{

price = price2;

}

물론 다른 DateTime 데이터 형식도 가능하며 CultureInfo를 통한 내용도 지원합니다.

 

자 그럼 SQL Server 2012에서는 변환 함수가 어떤 내용이 지원될까요? 아래와 같은 함수를 제공하니 변환시 적용하면 아주 좋을 듯 합니다.

l  PARSE

PARSE 함수부터 알아보도록 하겠습니다.

PARSE ( string_value AS data_type [ USING culture ] )

요청한 데이터 형식으로 변환된 식 결과를 반환합니다 아래 내용을 보시면 바로 이해가 되실 듯 합니다. 입력값을 적절한 데이터 형식으로 변환하면서 Culture를 적용할 수 있습니다.

 

SELECT PARSE(N'2012 4 11 09:00, 수요일' AS datetime USING 'ko-KR');

--2012-04-11 09:00:00.000

SELECT PARSE(N'2012 4 11 오전 9' AS datetime USING 'ko-KR');

--2012-04-11 09:00:00.000

SELECT PARSE(N'2012 4 11, 오전 9' AS datetime USING 'ko-KR');

--2012-04-11 09:00:00.000

 

SELECT PARSE('\100000' AS money USING 'ko-KR') AS Result

--100000.00

SELECT PARSE('$100000' AS money USING 'en-US') AS Result

--100000.00

 

l  TRY_PARSE

.NET 프로그래밍도 마찬가지인데 잘못된 데이터에 대한 변환시 오류가 발생합니다. 아래처럼요.

SELECT PARSE('ddd' AS money USING 'en-US') AS Result

메시지 9819, 수준 16, 상태 1, 1

culture 'en-US'() 사용하여 문자열 'ddd'() money 데이터 형식으로 변환하는 오류가 발생했습니다.

 

 

데이터가 잘 들어오면 되지만 아니면 오류가 발생하므로 변환이 되는지 검사를 해볼 수 있는 함수가 TRY_PARSE 입니다. 변환이 가능하면 변환값이 나오고 아니면 NULL을 반환합니다.

.NET 프로그래밍과 사실 거의 유사합니다.  아래 구문을 보시죠.

 

SELECT TRY_PARSE('ddd' AS money USING 'en-US') AS Result

--NULL

 

 

 

l  TRY_CONVERT

TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )

TRY_PARSE와 유사합니다, 변환이 성공하면 값을 반환하며 실패하면 NULL을 반환합니다. Culture는 없으며 Style을 제공하는 것이 차이점입니다.

SELECT TRY_CONVERT(datetime2, '04/11/2012') AS Result;

--2012-04-11 00:00:00.0000000

SELECT TRY_CONVERT(datetime2, '13/11/2012') AS Result;

--NULL

 

DECLARE @dt DATETIME = PARSE(N'2012 4 11 오전 9' AS datetime USING 'ko-KR')

SELECT TRY_CONVERT(varchar(30), @dt,112) AS Result;

--20120411

 

이상으로 새롭게 제공되는 변환함수에 대한 내용을 정리했습니다.

 

신고
posted by 정홍주