반응형

프로그래밍 언어중에서 조건에따라 작업방식을 달리 할 수 있는 조건문이라는 것이 있습니다. 대표적인 문법이 IF문과 CASE문인데요. MSSQL에서도 조건절인 CASE문과 IF문을 지원하니 한번 활용해보시는 것도 좋을것 같습니다.

 

CASE WHEN

가장 많이쓰이는 조건문입니다. 조건에 따라 값을 지정해 주는 역할을 합니다. 

--CASE사용법--
CASE WHEN 조건절 THEN 참일때 값 ELSE 거짓일때 값 END 컬럼명
--테이블(MY_TABLE)에서 성별(GENDER)이 001이면 여, 그게아니면 남자로 검색--
SELECT DISTINCT
GENDER,
CASE WHEN GENDER = '001' THEN '여' ELSE '남' END AS 성별
FROM MY_TABLE

다중 CASE WHEN

--테이블(MY_TABLE)에서 성적(SCORE)별 학점을 계산
SELECT *,
   (CASE WHEN SCORE>= '90' THEN 'A학점'
        WHEN (SCORE>= '80' AND SCORE < '90') THEN 'B학점'
        WHEN (SCORE>= '70' AND SCORE < '80') THEN 'C학점' 
        WHEN (SCORE>= '60' AND SCORE < '70') THEN 'D학점'
        ELSE 'F학점'
    END) AS '학점'
FROM MY_TABLE

IF ELSE

CASE WHEN과 같은 조건문입니다. CASE문과 마찬가지로 조건에 따라 원하는 작업을 수행할 수 있습니다.

--IF 사용법--
IF 조건 참일때 값 ELSE 거짓일때 값 END 컬럼명
--@NUM 이 30일때 30이라고 출력, 40일경우 40이라고 출력, 아닐경우 아니라고 출력하기--
DECLARE @NUM INT
SET @NUM = 40

IF(@NUM = 30)
PRINT 'NUM은 30입니다.'
ELSE IF(@NUM=40)
PRINT 'NUM은 40입니다'
ELSE
PRINT 'NUM은 30이나 40이 아닙니다.'

출처 : https://coding-factory.tistory.com/113

반응형
반응형

# MSSQL 날짜 더하기, 시간 더하기 / MSSQL 날짜 빼기, 시간 빼기 / MSSQL 날짜 및 시간 계산하기

DATEADD 는 MSSQL에서 날짜 형식(DATETIME)의 값을 계산할때 사용합니다.

년    /    year (yy)

월    /    month (mm)

일    /    day (dd)

시    /    hour (hh)

분    /    minute (mi)

초    /    second (ss)

Ex 1. select getdate() as '현재시간', dateadd( mi, 10, getdate() ) as '10분더한시간' 

Value 1. 현재시간(2017-03-31 12:21:58.923), 10분더한시간(2017-03-31 12:31:58.923)

 

Ex 2. 아래와 같이 현재시간 또는 임의의 시간에서 시간을 더하거나 뺄수가 있다.

Value 2.



출처: https://rohsstory.tistory.com/276 [디버깅하는 남자]

반응형
반응형

MSSQL에서는 날짜를 여러가지형태로 가공할 수 있는 함수들을 많이 제공하고 있습니다. 이번 포스팅에서는 대표적인 날짜함수(GETDATE,DATEADD,DATEPART,DATEDIFF)의 사용법에 대해서 알아보도록 하겠습니다.

 

 

GETDATE 

GETDATE함수는 현재 컴퓨터에 설정되어있는 시스템 시간을 불러와주는 함수입니다.

2018-03-31 오전 01:40:30 

위와같이 GETDATE()함수는 년월일은 물론이거니와 분,초 까지도 구해줍니다.

하지만 모든 사용자들이 위와같은 형식으로 사용하지는 않겠죠.

여기서 우리는 우리가 표시할 시간이나 날짜만 적절히 뽑아 올 수도 있고

날짜 형태를 바꿔서 출력할수도 있습니다.

 

사용법

--현재 날짜 출력--
SELECT GETDATE() AS 시스템일자

--현재 날짜의 연,월,일 출력--
SELECT 
YEAR(GETDATE()) AS 년,
MONTH(GETDATE()) AS 월,
DAY(GETDATE()) AS 일

출력 포맷 변경

--YYYY/MM/DD--
Select Convert(varchar(10),Getdate(),111)

--YYYYMMDD--
Select Convert(varchar(10),Getdate(),112)

--HH:MM:SS--
Select Convert(varchar(8),Getdate(),108)

--HH:MM:SS:mmm--
Select Convert(varchar(12),Getdate(),114)

--HHMMSS--
Select Replace(Convert(varchar(8),Getdate(),108),':','')

--HHMMSSmmm--
Select Replace(Convert(varchar(12),Getdate(),114),':','')

--YYYY/MM/DD HH:MM:SS--
Select Replace(Convert(varchar(30),Getdate(),120),'-','/')

--YYYY/MM/DD HH:MM:SS--
Select Replace(Convert(varchar(30),Getdate(),121),'-','/')

--YYYY/MM/DD HH:MM:SS--
Select Convert(varchar(10),Getdate(),111) + Space(1) + Convert(varchar(8),Getdate(),108)

--YYYYMMDDHHMMSS--
Select Convert(varchar(10),Getdate(),112) + Replace(Convert(varchar(8),Getdate(),108),':','')

 

DATEADD 

DATEADD함수는 날짜에 원하는 일수를 더해서 출력해주는 함수입니다.

100일뒤에는 몇일이다 이런것은 쉽게 계산하기 힘든데

DATEADD함수를 쓰면 이런것들을 편리하게 계산할 수 있습니다.

이 함수를 좀 더 응용하면 100일 뒤에는 무슨 요일이다 이렇게도 응용가능합니다.

 

사용법

--2개월 후 출력--
SELECT DATEADD(MM,2,GETDATE()) AS '2개월후'

--30일전 출력--
SELECT CONVERT(NVARCHAR(8),DATEADD(DAY,-30,'20180124'),112)AS '30일전'

--1달 뒤 요일계산
SELECT DATANAME(WEEKDAY,DATEADD(MM,1,GETDATE())) AS'요일계산'

 

 

DATEPART 

DATEPART함수는 날짜에서 지정한 날짜형식의 부분만 출력해주는 함수입니다.

아주 다양하게 활용이 가능한 함수입니다.

 

사용법

--현재 년도 구하기
SELECT DATEPART(YEAR,GETDATE()); 

--현재 월 구하기--
SELECT DATEPART(MONTH,GETDATE())

--현재 일 구하기--
SELECT DATEPART(DAY,GETDATE())

--현재 분기 구하기--
SELECT DATEPART(QQ,GETDATE())

--올해의 몇번째 날인지 구하기--
SELECT DATEPART(DAYOFYEAR,GETDATE())

--올해의 몇째 주인지 구하기--
SELECT DATEPART(WEEK,GETDATE())

--이번주의 몇번째 날인지 구하기--
SELECT DATEPART(WEEKDAY,GETDATE())

--오늘이 무슨요일인지 구하기--
SELECT
CASE DATEPART(WEEKDAY, GETDATE()) 
  WHEN '1' THEN '일요일'
  WHEN '2' THEN '월요일'
  WHEN '3' THEN '화요일'
  WHEN '4' THEN '수요일'
  WHEN '5' THEN '목요일'
  WHEN '6' THEN '금요일'
  ELSE '토요일'
END AS '요일'

 

DATEDIFF 

DATEDIFF함수는 지정한 두 날자간의 간격을 계산해주는 함수입니다.

정해준 날짜형식에 맞춰 리턴값이 다르므로 적절하게 잘 설정해주셔야 합니다.

 

사용법

--지정일과의 현재와의 년도차이 계산--
SELECT DATEDIFF(YY,'2000-01-01',GETDATE())

--지정일과의 현재와의 월차이 계산--
SELECT DATEDIFF(MM,'2000-01-01',GETDATE())

--지정일과 현재와의 일차이 계산--
SELECT DATEDIFF(DD,'2000-01-01',GETDATE())
반응형
반응형

조인이란?

두개이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법입니다. 자신이 검색하고 싶은 컬럼이 다른 테이블에 있을경우 주로 사용하며 여러개의 테이블을 마치 하나의 테이블인 것처럼 활용하는 방법입니다. 보통 Primary key혹은 Foreign key로 두 테이블을 연결합니다. 테이블을 연결하려면 적어도 하나의 칼럼은 서로 공유되고 있어야합니다.고등학교 수학시간때 배웠던 벤다이어그램을 활용하면 쉽게 이해할 수 있습니다.

 

INNER JOIN

쉽게말해 교집합이라고 생각하시면 됩니다. 기준테이블과 Join한 테이블의 중복된 값을 보여줍니다.

결과값은 A의 테이블과 B테이블이 모두 가지고있는 데이터만 검색됩니다.

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
INNER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키....

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT

LEFT OUTER JOIN

기준테이블의 값 + 테이블과 기준테이블의 중복된 값을 보여줍니다.

왼쪽 테이블을 기준으로 JOIN을 하겠다고 생각하시면 됩니다.

그럼 결과값은 A테이블의 모든 데이터와 A테이블과 B테이블의 중복되는 값이 검색되겠네요

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
LEFT OUTER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 .....

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT

 

RIGHT OUTER JOIN

LEFT OUTER JOIN의 반대입니다.

오른쪽 테이블을 기준으로 JOIN을 하겠다고 생각하시면 됩니다.

그럼 결과값은 B테이블의 모든 데이터와 A테이블과 B테이블의 중복되는 값이 검색되겠군요

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
RIGHT OUTER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 .....

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
RIGHT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT

 

FULL OUTER JOIN

쉽게말해 합집합을 생각하시면 됩니다.

A테이블이 가지고 있는 데이터 , B테이블이 가지고있는 데이터 모두 검색됩니다.

사실상 기준테이블의 의미가 없습니다.

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
FULL OUTER JOIN 조인테이블 별칭 ON 기준테이블별칭.기준키 = 조인테이블별칭.기준키 .....

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP AND A.DEPT = B.DEPT

 

CROSS JOIN

 

크로스 조인은 모든 경우의 수를 전부 표현해주는 방식입니다.

기준테이블이 A일경우 A의 데이터 한 ROW를 B테이블 전체와 JOIN하는 방식입니다.

그러니 결과값도 N * M 이 되겠죠?

위사진에서는 A테이블에 데이터가 3개, B테이블에는 데이터가 4개가 있으므로 총 12개가 검색됩니다.

--문법(첫번째방식)--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭
CROSS JOIN 조인테이블 별칭

--예제(첫번째방식)--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A
CROSS JOIN JOIN_TABLE B

=====================================================================================

--문법(두번째방식)--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 기준테이블 별칭,조인테이블 별칭

--예제(두번째방식)--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A,JOIN_TABLE B

 

SELF JOIN

 

셀프 조인은 자기자신과 자기자신을 조인한다는 의미입니다.

하나의 테이블을 여러번 복사해서 조인한다고 생각하시면 될듯합니다.

자신이 가지고 있는 칼럼을 다양하게 변형시켜 활용할 경우에 자주사용합니다.

--문법--
SELECT
테이블별칭.조회할칼럼,
테이블별칭.조회할칼럼
FROM 테이블 별칭,테이블 별칭2

--예제--
SELECT
A.NAME, --A테이블의 NAME조회
B.AGE --B테이블의 AGE조회
FROM EX_TABLE A,EX_TABLE B

출처 : https://coding-factory.tistory.com/87

반응형

+ Recent posts