[Transact-SQL] Working with NULLs
Online Learning 2020. 12. 9. 14:31NULL은 빠진 값이나 알려지지 않은 값이다.
2 + NULL = NULL
'MyString' + NULL = NULL
NULL = NULL returns false
NULL IS NULL returns true
데이터베이스에서는 NULL을 어떻게 처리하는지가 중요하다.
NULL Functions
- ISNULL(column/variable, value)
- 컬럼/변수가 NULL이면 value를 리턴한다
- NULLIF(column/variable, value)
- 컬럼/변수가 value이면 NULL을 리턴한다
- COALESCE(column/variable1, column/variable2, ...)
- 맨 처음 만나는 NULL이 아닌 컬럼/변수를 리턴한다.
Size를 정수로 TRY_CAST로 변환하고, 성공하면 그 값으로, 실패하면 NULL을 ISNULL함수를 통해 0 으로 바꾼다.
SELECT Name, ISNULL(TRY_CAST(Size AS Integer),0) AS NumericSize
FROM SalesLT.Product;
비슷하게 Color나 Size가 NULL이라면 '' (blank string)을 리턴한다.
SELECT ProductNumber, ISNULL(Color, '') + ', ' + ISNULL(Size, '') AS ProductDetails
FROM SalesLT.Product;
Color가 Multi이면 NULL을 리턴한다.
SELECT Name, NULLIF(Color, 'Multi') AS SingleColor
FROM SalesLT.Product;
DiscontinuedDate, SellEndDate, SellStartDate중 처음으로 NULL이 아닌 값을 리턴한다.
SELECT Name, COALESCE(DiscontinuedDate, SellEndDate, SellStartDate) AS FirstNonNullDate
FROM SalesLT.Product;
CASE는 프로그래밍 언어에서 if나 switch와 비슷하게 사용할 수 있다.
SellSellEndDate가 NULL이라면 SalesStatus 컬럼에 On Sale로 표시하고
NULL이 아니라면 Discontinued로 표시한다.
--Searched case
SELECT Name,
CASE
WHEN SellEndDate IS NULL THEN 'On Sale'
ELSE 'Discontinued'
END AS SalesStatus
FROM SalesLT.Product;
WHEN THEN을 여러개 쓸 수 있다.
--Simple case
SELECT Name,
CASE Size
WHEN 'S' THEN 'Small'
WHEN 'M' THEN 'Medium'
WHEN 'L' THEN 'Large'
WHEN 'XL' THEN 'Extra-Large'
ELSE ISNULL(Size, 'n/a')
END AS ProductSize
FROM SalesLT.Product;
'Online Learning' 카테고리의 다른 글
[Transact-SQL] Filtering and Using Predicates (0) | 2020.12.09 |
---|---|
[Transact-SQL] Removing Duplicates , Sorting Results, (0) | 2020.12.09 |
[Transact-SQL] Data Types (0) | 2020.12.09 |
[Transact-SQL] SELECT (0) | 2020.12.09 |
[Transact-SQL] AdventureWorksLT.bak Import to Local DB 로컬데이터베이스에 백업데이터베이스 추가하기 (0) | 2020.12.09 |