[Transact-SQL] Data Types

Online Learning 2020. 12. 9. 12:25

 

Exact Numeric

Approximate Numeric

Character

Date/Time

Binary

Other

tinyint

float

char

date

binary

cursor

smallint

real

varchar

time

varbinary

hierarchyid

int

 

text

datetime

image

sql_variant

bigint

 

nchar

datetime2

 

table

bit

 

nvarchar

smalldatetime

 

timestamp

decimal/numeric

 

ntext

datetimeoffset

 

uniqueidentifier

numeric

       

xml

money

       

geography

smallmoney

       

geometry

 

데이터 타입 변환

 

Implicit Conversion(암시적 변환)

-호환가능한 데이터타입은 자동으로 변환됨

Explicit Conversion(명시적 변환)

-사용자가 변환함수를 사용해서 직접 변환

  • CAST / TRY_CAST
  • CONVERT / TRY_CONVERT
  • PARSE / TRY_PARSE
  • STR

 

Date와 String은 암시적 변환이 가능하지만, 문화권에 따라서 년월일 표기의 순서가 다르므로 암시적 변환을 사용하지 않는게 좋다.

CONVERT함수에 이런 옵션이 많이 제공된다. ISO포맷이나 ANSI포맷 등

 

TRY는 연산에 실패하면 NULL을 리턴한다. 적어도 문장 자체에서 에러가 발생해 멈추지는 않는다.

 

--CAST
SELECT CAST(ProductID AS varchar(5)) + ': ' + Name AS ProductName
FROM SalesLT.Product;

--CONVERT
SELECT CONVERT(varchar(5), ProductID) + ': ' + Name AS ProductName
FROM SalesLT.Product;

 

 

--Convert Dates
SELECT SellStartDate,
       CONVERT(nvarchar(30), SellStartDate) AS ConvertedDate,
	   CONVERT(nvarchar(30), SellStartDate, 126) AS ISO8601FormatDate
FROM SalesLT.Product;

 

 

 

Cast가 실패하면 에러가 발생한다.

SELECT Name, CAST (Size AS Integer) AS NumericSize
FROM SalesLT.Product; --(note error - some sizes are incompatible)

 

TRY_CAST를 사용하면 에러는 나지 않고 변환에 실패하면 NULL로 표시된다.

SELECT Name, TRY_CAST (Size AS Integer) AS NumericSize
FROM SalesLT.Product; --(note incompatible sizes are returned as NULL)

: