이번 포스팅에서는 앞선 두 포스팅에서 배웠던 문자열 합치기 : STUFF, FOR XML PATH 문자열 구분자 추가 : QUOTENAME 기법들을 활용해 동적 피벗테이블을 만들어보도록 하겠습니다. 동적 피벗 테이블 만들기 예제 테이블 DEPT, EMP를 이용해서 연도별(DT) 부서 입사 현황을 조회한다 (회사코드(COMPANY):0327, 사업장코드(BIZAREA):1000 데이터로 한정함) 1. PIVOT을 이용해 년도를 칼럼으로 표시 2. 동적컬럼 생성 시 STUFF, QUOTENAME 함수를 이용하여 입사자가 있는 년도만 표시 결과 화면 예시 동적 피벗 만들기 DECLARE @COL AS NVARCHAR(MAX) --변수선언 DECLARE @QUERY AS NVARCHAR(MAX) --변수에 쿼리..
MSSQL에서 문자열을 합치는 방법은 여러가지가 있습니다. 이번 포스팅에서는 테이블을 Select 해온 결과값을 문자열로 쉽고 간편하게 만들 수 있는 방법을 소개해 드리도록 하겠습니다. STUFF, FOR XML STUFF : 지정된 문자열의 시작위치와 크기를 지정하여 원하는 문자로 치환하는 함수입니다. 사용법 STUFF('[문자열]','[시작위치]','[크기]','[치환문자]') FOR XML : 쿼리의 실행 결과를 XML형식으로 만들어줍니다. 모드 1. RAW : 행 집합의 각 행마다 SELECT문으로 반환되는 단일 행(ROW)를 생성합니다. 2. AUTO : SELECT문의 결과 XML에서 중첩된 구조를 생성합니다. 3. EXPLICIT : XML모양을 자신의 의지대로 특성과 요소를 혼합할 수 있습..
QUOTENAME란? 문자열을 합치다 보면 가끔 문자열 앞에 따옴표 혹은 쉼표를 붙여준다거나 대괄호로 묶어줘야 할 경우가 있습니다. 그럴 때 유용하게 쓰이는 함수가 바로 QUOTENAME이라는 함수인데요 QUOTENAME이라는 함수는 문자열 앞뒤로 구분자를 넣어주는 기능을합니다. 구분자를 입력하지 않았을경우에는 대괄호가 추가되는 함수입니다. 사용법 --문법-- QUOTENAME ( '대상문자열' ,구분자 ) --EX-- PRINT(QUOTENAME ('ABCD')) ==> [ABCD] PRINT(QUOTENAME ('ABCD','''')) ==> 'ABCD' 예제 테이블 EX_TABLE에는 다음과같이 DT칼럼의 데이터 7개가 있다. 이 데이터를 대괄호로 묶어서 한 줄로 출력하시오 DECLARE @COL ..
BETWEEN구문 데이터베이스를 사용하다 보면 ~어디서부터 ~어디까지의 데이터를 출력하고 싶은 경우가 있습니다. 대표적인 경우가 날짜죠 ~일부터 ~일까지의 데이터를 출력해라!! 물론 X보다 크고 Y보다 작은 데이터를 찾아라 이런 식으로도 할 수 있지만 더 간결하고 유용하게 사용할 수 있는 문법인 BETWEEN 절을 소개합니다. 사용법 SELECT * FROM [테이블명] WHERE [칼럼명] BETWEEN [조건1] AND [조건2] 예제 --나이(AGE)가 20살~25살까지의 사원조회 SELECT * FROM MY_TABLE WHERE AGE BETWEEN 20 AND 24 --사원번호(NO_EMP)가 '0000'~'0010'까지이거나 나이(AGE)가 30살~40살인 사원조회 SELECT * FROM ..
IN절 데이터베이스를 사용하다 보면 이런 경험들 있으실 겁니다. XX이거나 XX이거나 XX이거나 XX이거나 이런 경우요 물론 OR을 활용해서 처리를 할 수도 있지만 IN이라는 좀 더 간편한 방식이 있습니다. 사용법 SELECT * FROM [테이블명] WHERE [칼럼명] IN ( [조건1],[조건2],[조건3] ) 예제 --나이가 20살,24살,26살인 사원 조회 SELECT * FROM MY_TABLE WHERE AGE IN(20,24,26) --사원번호가 '0000','0004','0008'이고 나이가 20살 24살 28살인 사원 조회 SELECT * FROM MY_TABLE WHERE NO_EMP IN('0000','0004','0008') AND AGE IN(20,24,28) [MS_SQL] L..
LIKE구문 쿼리문 WHERE절에 주로 사용되며 부분적으로 일치하는 칼럼을 찾을때 사용됩니다. SELECT * FROM [테이블명] WHERE LIKE [조건] _ : 글자숫자를 정해줌(EX 컬럼명 LIKE '홍_동') % : 글자숫자를 정해주지않음(EX 컬럼명 LIKE '홍%') 사용법 --A로 시작하는 문자를 찾기-- SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE 'A%' --A로 끝나는 문자 찾기-- SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '%A' --A를 포함하는 문자 찾기-- SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE '%A%' --A로 시작하는 두글자 문자 찾기-- SELECT 컬럼명 FROM 테이블 WHERE 컬럼명 LIKE 'A_'..
프로그래밍 언어 중에서 조건에 따라 작업방식을 달리 할 수 있는 조건문이라는 것이 있습니다. 대표적인 문법이 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 WHE..
데이터베이스를 하다 보면 가끔 엉뚱한 부분에 공백이 들어가서 애먹는 경우가 많습니다. 대표적으로는 decleare 한 변수에 varchar값을 계속해서 + 시킬 때 공백이 들어가는데요. 이렇게 예상치 못한 공백 값이 들어갔을 때 공백을 효율적으로 제거해주는 함수가 있습니다. 이번 포스팅에서는 MSSQL 공백 제거 함수 LTRIM, RTRIM에 대해 알아봅니다. LTRIM 해당 문자열의 왼쪽에 있는 공백을 제거해주는 함수 사용법 --문법-- LTRIM(문자열) --예제-- DECLARE @SQL NVARCHAR(200) SET @SQL = ' SPACE' LTRIM(@SQL) 문자열을 합 칠경 우 왼쪽에 공백이 생기는데 이를 제거할 때 요긴하게 사용됨 DECLARE @NUM INT, @STR NVARCHA..
MSSQL에서는 날짜를 여러 가지 형태로 가공할 수 있는 함수들을 많이 제공하고 있습니다. 이번 포스팅에서는 대표적인 날짜 함수(GETDATE, DATEADD, DATEPART, DATEDIFF)의 사용법에 대해서 알아보도록 하겠습니다. GETDATE GETDATE함수는 현재 컴퓨터에 설정되어있는 시스템 시간을 불러와주는 함수입니다. 2018-03-31 오전 01:40:30 위와 같이 GETDATE() 함수는 년월일은 물론이거니와 분, 초 까지도 구해줍니다. 하지만 모든 사용자들이 위와 같은 형식으로 사용하지는 않겠죠. 여기서 우리는 우리가 표시할 시간이나 날짜만 적절히 뽑아 올 수도 있고 날짜 형태를 바꿔서 출력할 수도 있습니다. 사용법 --현재 날짜 출력-- SELECT GETDATE() AS 시스템..
데이터베이스를 사용하다보면 테이블안에있는 데이터의 특정 문자들만 치환 해줘야 하는 일이 생깁니다. 이번 포스팅에서는 특정 문자열을 바꿔주는 REPLACE함수와 STUFF함수에 대해서 알아보도록 하겠습니다. REPLACE 지정된 문자열 값을 특정 문자열로 바꿔주는 함수입니다. 사용법 --문법-- REPLACE('문자열','치환예정문자','치환할문자') --예시-- REPLACE('ABCDEFG','DEF','XXX') 예제 --MY_TABLE에서 이름(NM_KOR)을 이씨를 김씨으로 바꿔서 출력-- SELECT REPLACE(NM_KOR,'이','김')AS 사원명 FROM MY_TABLE STUFF 지정된 문자열의 시작위치와 크기를 지정하여 원하는 문자로 치환하는 함수입니다. 사용법 --문법-- STUFF..
MSSQL에서 사용되는 데이터 타입 변환 함수는 CONVERT함수와 CAST함수입니다. 두 함수 다 하나의 유형에서 다른 유형으로 데이터를 변환하는 데 사용합니다. 쓰는 방식만 조금 다르고 하는 일은 같습니다. 자세한 설명은 해당 사이트에 있으니 참조하시기 바랍니다. Conver함수와 Cast함수 사용링크 Convert 개인적으로 가장 많이 사용하는 데이터 변환 함수라고 생각합니다. 날짜 변환하는데도 유용하게 사용 가능합니다. 참고로 부동 소수점 또는 숫자에서 정수로 변환할 때 CONVERT() 함수는 결과를 자르고 다른 변환일 경우에는 반올림합니다. 사용법 --문법-- CONVERT(data_type[(length)], expression[style]) --예시-- SELECT CONVERT(NVARC..
LEFT Left함수는 문자열을 받아서 왼쪽부터 원하는 길이만큼 자르는 함수이며 주민등록번호만으로도 생년월일을 구하거나 이름을 잘라서 성만 출력하는 등 다양한 방법으로 활용 가능합니다. 사용법 --문법-- LEFT(문자열,길이) --예시-- LEFT(NAME,2) 예제 --테이블(MY_TABLE)에서 이름(NM_KOR)을 잘라 성만 출력-- SELECT LEFT(NM_KOR,1) AS 이름 FROM MY_TABLE RIGHT RIGHT함수는 LEFT함수와 기능은 같지만 방향만 다른 함수입니다. RIGHT함수는 문자열을 받아서 오른쪽부터 원하는 길이만큼 자르는 함수이며 LEFT함수와 마찬가지로 다양하게 사용이 가능합니다. 사용법 --문법-- RIGHT(문자열,길이) --예시-- RIGHT(NAME,3) 예..
ISNULL함수 ISNULL함수는 Microsoft SQL Server의 내장함수이며 칼럼이 NULL값일 경우 다른값으로 대체할 수 있는 기능이 있습니다. 데이터베이스를 사용하다보면 파라미터로 NULL값이 오거나 칼럼안에 NULL값이 들어있는 등 경우에 따라 NULL값을 적절히 처리해줘야하는 경우가 많은데 이럴때 유용하게 쓰일 수 있는 함수입니다. 사용법 --문법-- ISNULL(칼럼,칼럼이 NULL일경우 대체할 값) --예시-- ISNULL(Colum,0) (ISNULL(@PARAMETER,'')='') 예제 1. 부서(DEPT)를 검색하되 부서가 NULL값이면 '부서없음'으로 검색하기 SELECT ISNULL(DEPT,'부서없음') AS DPET FROM table 2. 파라미터와 동일한 이름(NAM..