[22/05/11]MS SQL날짜함수

Que Lin·2022년 5월 11일

MS-SQL

목록 보기
2/11

날짜함수

YEAR(날짜)

날짜의 년을 반환

MONTH(날짜)

날짜의 월을 반환

DAY(날짜)

날짜의 일을 반환

DATEADD(구성요소,더할숫자,날짜)

날짜 + 구성요소(YY MM CD HH MI SS)를 숫자만큼 더함

* 오늘 날짜와 100일 후의 날짜 표시하기

SELECT GETDATE(), DATEADD(dd, 100, GETDATE())

2019-07-29 17:27:41.857, 2019-11-06 17:27:41.857
 
* 오늘 날짜와 2주 후의 날짜 표시하기

SELECT GETDATE(), DATEADD(wk, 2, GETDATE())

2019-07-29 17:27:41.857 2019-08-05 17:27:41.857

DATEDIFF(구성요소,날짜1,날짜2)

날짜1 - 날짜2 차이를 반환

DATEPART(구성요소,날짜)

날짜에 해당하는 구성요소를 숫자로 반환
EX) DATEPART(YY,2011-02-21) -> 2011

DATEROMPARTS(년,월,일)

해당하는 날짜를 반환
EX) DATEROMPARTS(2022,10,21) -> 2022-10-21

조건함수 / 조건문

1. 조건 하나일 때 IIF

IIF(조건, 참일 때 값, 거짓일 때 값)

IIF(결혼유무=N'기혼', 'O','X') AS 결혼구분

2. 조건 여러개일 때 CASE WHEN

CASE WHEN 결혼유무=N'기혼' THEN 'O'
	 WHEN 결혼유무=N'미혼' THEN 'X'
	 ELSE '-'
     END AS 결혼구분

※ N 은 National의 약자로, 다국어를 입력할 때 꼭 사용

연산자

: 대부분 WHERE절의 조건식에서 사용되어 원하는 결과만 조회함

IN('값1','값2','값N'...)

'값1','값2','값N'...중 하나

BETWEEN 값1 AND 값2

값1,값2를 포함한 사이의 값

IS NULL

값이 NULL

IS NOT NULL

값이 NULL이 아님

LIKE '패턴'

패턴이 같은 값

% : 없거나 1개 이상의 글자
_ : 1개의 글자
[0-9] : 0-9까지의 숫자
[A-Z] : A-Z까지의 영자
EX)

SELECT * 
FROM 초기고객정보
WHERE ID LIKE '__C%';

-- ID가 C와 숫자 2개인 데이터
SELECT * 
FROM 초기고객정보
WHERE ID LIKE 'C[0-9][0-9]'

-- ID가 B,C,D중 하나로 시작하는 데이터
SELECT * 
FROM 초기고객정보
WHERE ID LIKE '[BCD]%'

NOT LIKE '패턴'

패턴이 다른 값

연산자 우선순위
: () - AND - OR

최찰떡 강의 문제풀이
1. 해당하는 칼럼 찾기
2. 필요한 작업 나열하기
3. 작업에 필요한 연산자 찾기

--전화번호를 믿을 수 없는 독일 공급업자를 알려주세요.
--[참조] 독일 전화번호 형식 : (숫자3개) 를 포함 EX) (012)3456789

SELECT SupplierName, ContactName, Country, Phone 
FROM Suppliers 
WHERE Country='Germany'
AND Phone NOT LIKE '%([0-9][0-9][0-9])%'
--2) 다른 독일 공급업자와 구분하여 표시해주세요.
--[참조] 독일 전화번호 형식 : (숫자3개) 를 포함 EX) (012)3456789 / 새로운 칼럼 생성 (Notes : Exact 또는 Inexact)

SELECT SupplierName, ContactName, Country, Phone, 
CASE WHEN Phone NOT LIKE '%([0-9][0-9][0-9])%' THEN 'Exact'
ELSE 'Inexact'
END AS Notes
FROM Suppliers 
WHERE Country='Germany'

--답
SELECT SupplierName, ContactName, Country, Phone, 
IIF(Phone NOT LIKE '%([0-9][0-9][0-9])%','Exact','Inexact')
AS Notes
FROM Suppliers 
WHERE Country='Germany' 

--3) 자료를 후보순위별, 공급업체 이름별로 정렬해주세요. (모두 오름차순)
--[참조] 후보 1 : 캐나다, 후보2 : 프랑스, 후보3 : 호주 / 새로운 칼럼 생성 (Candidate : 1, 2, 3) 

SELECT SupplierName, ContactName, Country,
CASE WHEN Country='Canada' THEN '1'
WHEN Country='France' THEN '2'
ELSE '3'
END AS Candidate
FROM Suppliers 
WHERE Country IN('Canada','France','Australia') 
ORDER BY Candidate, SupplierName

출처: https://dongpal.tistory.com/34 [dongpal's story:티스토리]

profile
1일 1커밋 1일 1벨로그!

0개의 댓글