본문 바로가기

DataBase/MSSQL

(13)
[MSSQL] 일별통계 데이터 작성시 spt_values 활용 일별통계 쿼리 작성시 데이터가 없어 데이터가 빠지는 현상이 있다. 이럴땐 spt_values 을 활용하여 LEFT OUTER JOIN 을 걸어 데이터 추출이 가능하다 DECLARE @S_DATE smalldatetime,@E_DATE smalldatetime SET @S_DATE = CONVERT(smalldatetime, '2019-02-01') -- 특정월 시작일자 SET @E_DATE = DATEADD(day, -1,DATEADD(MONTH, 1,DATENAME(YEAR,@S_DATE) + DATENAME(month,@S_DATE)+'01')) -- 특정월 종료일자 SELECT CONVERT(CHAR(10), DATEADD(d, NUMBER, @S_DATE),120) AS DT FROM MASTER..
[MSSQL] SP 문자열이나 이진데이터가 잘립니다. 간혹 INSERT SP 실행시 '문자열이나 이진 데이터는 잘립니다.' 와같이 컬럼의 길이가 맞지 않아 오류가 발생할 때가 있다. 간혹 컬림이 많은 테이블이라면 어떤 컬럼에서 문자열이 짤리는지 찾기 번거로울때가 있는데 그때는 SP 에 'SET ANSI_WARNINGS OFF' 설정을 주어 INSERT 시킨후 짤린 데이터가 있는지 찾아보는게 편하다.
[MSSQL] ROW 를 컬럼으로 바꾸는 방식 (PIVOT 과 CASE문) 아래와 같은 테이블을 사용자별 SNS 현황을 변환해서 하나의 ROW로 출력해야하는 경우에 사용한다. Sql Server PIVOT 함수를 사용하거나 CASE 문을 활용해서 사용이 가능하다. 두방식 모두 동일한 결과를 출력한다. PIVOT 활용 SELECT name, K AS Kakao , N AS Naver , F AS FaceBook FROM ( SELECTM.name, M.snsType FROM memberSns AS M ) AS MemberInfo PIVOT ( COUNT(snsType) FOR snsType IN ([K],[N],[F]) ) AS pivot_result 출력결과: CASE 문 활용 SELECTname, MAX(Kakao) as Kakao, MAX(Naver) as Naver, MA..
[MSSQL] 두테이블간 교집합(INTERSECT) 차집합(EXCEPT) 찾기 1. INTERSECT - SELECT * FROM TableA INTERSET SELECT * FROM TableB ( TableA 와 TableB 가 일치하는 결과를 리턴 ) - 교집합 개념 2. EXCEPT - SELECT * FROM TableA EXCEPT SELECT * FROM TableB ( TableA Row 내용 중 TableB와 Row 내용이 같지 않거나 TableA 에는 있는데 TableB에는 없는 데이터를 리턴 ) - 차집합 개념 3. 주의 사항 - TableA 와 TableB 의 컬럼의 갯수와 순서가 동일해야 함 - 각 상호 비교되는 컬럼들의 데이터 형식이 호환되어야 함 예제: //테이블간 컬럼이 모두 동일하지 않은경우 SubQuery 사용하여 조회가능 //차집합 SELECT *..
[MSSQL]MSSQL 날짜 변환표(GETDATE, CONVERT) 자주 쓰이는 변환표 번호 쿼리 결과 코드 21 CONVERT(CHAR(23), DATETIME, 21) 2000-01-02 13:14:15.678 YYYY-MM-DD HH:MM:SS.MS 23 CONVERT(CHAR(10), DATETIME, 23) 2000-01-02 YYYY-MM-DD 112 CONVERT(CHAR(8), DATETIME, 112) 20000102 YYYYMMDD - MSSQL 날짜 변환표 (기준날짜를 대상으로 CONVERT 실행하여 날짜 형변환) 번호 쿼리 결과 코드 0 CONVERT(CHAR(19), DATETIME, 0) 01 02 2000 1:14PM MM DD YYYY H:MM 1 CONVERT(CHAR(10), DATETIME, 1) 01/02/2000 MM/DD/YYYY ..
[MSSQL] SQL Server 에이전트로 API 호출 MSSQL SQL Server 에이전트를 활용하여 일정시간마다 API 를 호출하는 작업을 추가하는 방법입니다. 먼저 MSSQL Server 에이전트에 작업을 추가합니다. 우클릭을 눌러 새작업을 선택하면 아래와 같은 창이 나타납니다. 아래와같이 이름 및 간단한 설명을 남긴뒤 좌측상단의 단계를 설정합니다. 단계를 클릭하고 새로만들기(N)... 을클릭하여 단계를 추가합니다. 단계 이름과 명령어를 입력해주면 되는데 API 를 호출하기 위한 명령어는 아래와 같습니다. Declare @Object as Int; Declare @ResponseText as Varchar(8000) Exec [sys].[sp_OACreate] 'MSXML2.ServerXMLHTTP', @Object OUT; EXEC [sys].[sp..
[MSSQL]구분문자열로 Split처리 함수 MSSQL에서 특정문자열을 기준으로 데이터를 나눌때 사용하는 함수입니다. 1.문자열을 구분자로 분리하여 테이블로 반환하는 함수 CREATE FUNCTION [dbo].[FN_GET_Split] ( @StrValue VARCHAR(1000), -- 분리할 문자열 @SplitChar VARCHAR(1) -- 구분할 문자 ) RETURNS @SPLIT_TEMP TABLE ( VALUE VARCHAR(50) ) AS BEGIN DECLARE @oPos INT, @nPos INT DECLARE @TmpVar VARCHAR(1000) -- 분리된 문자열 임시 저장변수 SET @oPos = 1 -- 구분문자 검색을 시작할 위치 SET @nPos = 1 -- 구분문자 위치 WHILE (@nPos > 0) BEGIN S..
[MSSQL] 페이징 함수 OFFSET/FETCH SQL Server 2012 에서 Offset/Fetch 를 사용하여 효과적인 페이징처리를 하는 방법입니다. SELECT seqnum,id, Name, celnumber,RegistDate FROM Member_info ORDER BY seqnum DESC OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY; 2페이지를 조회하려면 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY; 로 OFFSET 을 수정하면되며 FETCH NEXT 는 한번에 조회할 데이터 갯수입니다. 온라인 설명서 : http://msdn.microsoft.com/ko-kr/library/ms188385(v=sql.110).aspx#Offset Offset Fetch에 대한 제한 사항 외부 쿼리와 상..
[MSSQL] 이전행과 다음행 데이터를 가져오는 LAG,LEAD 함수 SQL Server 2012 에서 행을 비교할때 사용할수있는 함수입니다. 1. 원본데이터 SELECT ProductID, ModifiedDate, StandardCost FROM Production.ProductCostHistory WHERE ProductID IN (711, 712, 713) ORDER BY ProductID, ModifiedDate 2. LAG/LEAD 함수 SELECT ProductID, StandardCost, ModifiedDate, LAG(StandardCost, 1, NULL) OVER (PARTITION BY ProductID ORDER BY ModifiedDate) AS PrevStandardCost, LEAD(StandardCost, 1, NULL) OVER (PARTI..
[MSSQL] 테이블, 컬럼 코멘트 조회 fn_listextendedproperty 함수를 이용하여 컬럼의 Description 을 조회할수있다. sys.fn_listextendedproperty 또는 ::fn_listextendedproperty으로도 사용 가능. sys.fn_listextendedproperty함수는 이하의 장소에 위치해 있습니다. 테이터베이스 > 시스템 테이터베이스 > master > 프로그래밍 기능 > 함수 > 시스템 함수 > 테이블 반환 함수 --테이블 코멘트 조회 SELECT OBJTYPE, OBJNAME, NAME, VALUE FROM ::FN_LISTEXTENDEDPROPERTY (NULL, 'SCHEMA', 'DBO', 'TABLE', '테이블명', DEFAULT, DEFAULT); --컬럼 코멘트 조회 SELE..