오라클에서 지난달(전달)의 첫날(1일)과 말일을 구하기 위해서는 TRUNC 함수와 ADD_MONTHS 함수를 사용하여 쿼리문을 복잡하게 작성하지 않아도 쉽게 구할 수 있다. 아래의 예제 외에도 해당 일자를 구할 수 있는 방법은 많이 있으며, 상황에 따라서 편리한 방법을 찾아서 사용하면 된다. 목차 이전달 첫날, 마지막날 구하기 이번달 첫날, 마지막날 구하기 이전달 첫날, 마지막날 구하기 SELECT TO_CHAR(SYSDATE, 'yyyy-mm-dd') AS "현재" , ADD_MONTHS(TRUNC(SYSDATE, 'mm'), -1) AS "이전달 첫날" , TRUNC(SYSDATE, 'mm') - 1 AS "이전달 말일" FROM dual TRUNC("날짜", "mm") 함수를 사용하여 해당 날짜의 ..
오라클에서 ROLLUP 함수를 사용하여 소계, 합계를 구할 수 있다. 그러나 소계를 제외하고 합계만 표시하고 싶을 때는 다양한 방법이 있겠지만, ROLLUP 칼럼을 괄호로 묶어서 합계를 구하는 방법과 GROUPING_ID 함수를 사용하여 필요한 행만 조회되도록 조건을 부여하는 방법을 사용하면 간단하게 소계를 제외할 수 있다. 목차 괄호( ( ) )를 사용하여 합계만 표시하는 방법 GROUPING_ID 함수를 사용하여 소계를 제외하는 방법 괄호( ( ) )를 사용하여 합계만 표시하는 방법 SELECT job , deptno , SUM(sal) FROM emp GROUP BY ROLLUP((job, deptno)) ROLLUP 칼럼 전체를 괄호로 한 번 더 묶으면 총합계만 표시된다. 그룹 칼럼이 많을 경우 ..
오라클에서 문자열에 특수문자가 포함되었는지 검색하기 위해서는 정규식 함수를 사용하면 된다. 오라클 10g부터 정규식 함수를 사용할 수 있으며, [:punct:] 문자 클래스를 사용하면 특수문자를 쉽게 찾을 수 있다. 그 외에도 찾고 싶은 특수문자를 직접 지정하여 검색할 수 있으며, 특수문자가 몇 개 포함되었는지도 확인할 수 있다. 목차 특수문자 포함여부 체크 (공백 제외) 특수문자 포함여부 체크 (공백 포함) 숫자, 소문자, 대문자, 한글을 제외한 문자 체크 지정한 특수문자가 포함되었는지 체크 특수문자 체크 및 개수 세기 (REGEXP_COUNT 함수) 특수문자 체크 및 위치 찾기 (REGEXP_INSTR 함수) 특수문자 포함여부 체크 (공백 제외) WITH temp AS ( SELECT 'abc,ABC..
오라클에서 문자열의 뒤에서부터 특정 문자열을 찾기 위해서는 INSTR 함수를 사용하면 된다. INSTR 함수의 기본 설정은 앞에서부터 문자열을 찾지만, 함수의 마지막 인자에 "-1"을 부여하면 문자열을 뒤에서부터 찾는다. 아래의 예제 쿼리문을 확인하면 아주 쉽게 이해할 수 있을 것이다. 기본 사용법 SELECT INSTR('Oracle, MySQL, SQL Server', 'SQL', -1) AS result FROM dual INSTR("대상 문자열", "찾을 문자열", -1) 함수의 마지막 인자에 "-1"을 부여하면 대상 문자열의 뒤에서부터 검색하며, 첫 번째로 찾은 문자열의 시작 위치를 반환한다. 대상 문자열에 찾을 문자열 "SQL"이 두 번 반복되지만, 뒤에서부터 찾은 문자열의 위치를 반환한다. ..
SQL Server에서 특정 기준의 소계 및 합계를 구할 때는 GROUPING SETS를 사용하면 쉽게 해결된다. GROUPING SETS는 ROLLUP과 CUBE 보다 더 다양한 합계를 구할 수 있으며 조금 더 기능이 강력하다고 생각하면 된다. 그러나 처음 사용할 때는 조금 복잡하다고 생각될 수 있지만, 괄호 사용법에 대해서 조금만 이해한다면 크게 어렵지 않게 사용할 수 있다. GROUPING SETS 사용법 합계, 총합계 구하기 SELECT job , SUM(sal) FROM emp WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN') GROUP BY GROUPING SETS(job, ()) GROUPING SETS는 그룹 칼럼을 입력하면 해당 칼럼별(job) 합계가 ..
SQL Server에서 모든 경우의 합계를 구할 때는 CUBE 함수를 사용하면 된다. 일반적인 합계를 구할 때는 SUM 함수를 사용하지만, 합계와 소계를 동시에 구하기 위해서는 ROLLUP, CUBE, GROUPING SETS 함수를 사용할 수 있다. 합계와 소계를 구하는 3가지 함수는 조금씩 결과가 다르게 출력되니, 상황에 맞게 사용하면 된다. CUBE 함수 사용법 SELECT job , SUM(sal) FROM emp WHERE job IN ('ANALYST', 'MANAGER', 'SALESMAN') GROUP BY CUBE(job) 그룹 칼럼 job에 대한 합계가 조회된 결과에 출력된다. 그룹 칼럼이 한 개인 경우 ROLLUP 함수와 동일한 결과가 출력된다. 그러나 그룹 칼럼이 여러 개인 경우 다..
SQL Server에서 공백을 추가하기 위해서는 SPACE 함수와 REPLICATE 함수를 사용할 수 있다. SQL Server 2005 이상을 사용한다면 SPACE 함수를 사용해서 공백을 추가하는 것이 좋으며, REPLICATE 함수를 사용해서도 공백을 추가할 수 있다는 것도 알아두면 좋다. 함수를 사용하지 않고 공백을 직접적으로 문자열에 합칠 수도 있지만 공백의 길이가 긴 경우 공백이 몇 개인지 확인이 쉽지 않기 때문에 함수를 사용할 것을 추천한다. 목차 SPACE 함수로 공백 넣기 REPLICATE 함수로 공백 넣기 SPACE 함수로 공백 넣기 SELECT 'SQL' + SPACE(1) + 'Server' AS [공백1] , 'SQL' + SPACE(2) + 'Server' AS [공백2] , 'S..
SQL Server에서 조회된 데이터에 순번을 매기기 위해서는 ROW_NUMBER 함수를 사용하면 된다. ROW_NUMBER 함수는 분석 함수이기 때문에 OVER 절과 함께 사용해야 한다. ROW_NUMBER 함수와 비슷한 순위를 구할 수 있는 RANK 함수도 존재한다. 목차 순번 매기기 그룹별 순번 매기기 정렬 사용 시 주의사항 순번 매기기 SELECT ename , job , sal , ROW_NUMBER() OVER(ORDER BY sal DESC) AS rownum FROM emp WHERE job IN ('MANAGER', 'SALESMAN') ROW_NUMBER 함수는 분석 함수이기 때문에 OVER 절과 함께 사용해야 한다. OVER 절 내부 ORDER BY 절에 순번을 매길 기준 칼럼을 작성..
SQL Server에서 순위를 구하기 위해서는 RANK 함수, DENSE_RANK 함수를 사용하면 된다. 두 함수의 사용방법은 동일하지만 순번을 매기는 방법이 조금 차이가 있으니 주의해서 사용해야 한다. RANK, DENSE_RANK 함수는 분석함수이기 때문에 OVER절과 함께 사용해야 한다. 목차 순위 구하기 그룹별 순위 구하기 정렬(ORDER BY) 사용 시 주의사항 순위 구하기 RANK 함수 사용법 SELECT ename , sal , RANK() OVER(ORDER BY sal DESC) AS rank_sal FROM emp WHERE job IN ('ANALYST', 'SALESMAN') 순위함수는 OVER 절과 함께 사용해야 하며 OVER 절 내부의 ORDER BY 절에 순위 칼럼을 지정하면 ..
SQL Server에서 패턴(정규식)으로 문자열의 위치를 찾을 때는 PATINDEX 함수를 사용하면 된다. 단순 문자열로 위치를 찾을 때는 CHARINDEX 함수를 사용하면 되며, 패턴으로 문자열 위치를 찾을 때는 PATINDEX 함수를 사용하면 된다. PATINDEX 함수를 사용하면 패턴을 사용하여 숫자, 영문자, 한글, 특수문자 등을 찾을 수 있으며, 정규식과 유사한 패턴을 사용하지만 일반적인 정규식은 아니라는 것은 인지하고 있어야 한다. 목차 PATINDEX 기본 사용법 PATINDEX 와일드카드(패턴) 사용법 PATINDEX 기본 사용법 SELECT PATINDEX('%SQL%', 'Microsoft SQL Server 2022') PATINDEX('%찾을문자열%', '대상문자열') 찾을 문자열 ..