SQL Server에서는 날짜, 시간을 더하거나 빼기 위해서는 DATEADD 함수를 사용한다. 현재 날짜에서 하루를 빼서 전일 데이터를 조회할 수 있으며, 일자외에도 년 월 시간 등 기준일자에 원하는 기간 만큰 쉽게 더하거나 뺄수 있다. 날짜 빼기, 더하기 (년, 월, 일) 일 계산 (DAY) SELECT DATEADD(DAY, -10, '2021-07-12') AS [10일전] , DATEADD(DAY, 10, '2021-07-12') AS [10일후] 월 계산 (MONTH) SELECT DATEADD(MONTH, -1, '2021-07-12') AS [1개월전] , DATEADD(MONTH, 1, '2021-07-12') AS [1개월후] 년 계산 (YEAR) SELECT DATEADD(YEAR, -..
오라클에서 문자열의 날짜를 TO_DATE 함수를 사용하여 날짜 형식으로 변경할 때 형식이 맞지 않으면 "ORA-01839: 지정된 월에 대한 날짜가 부적합합니다" 라는 오류가 발생한다. 문자열을 날짜 형식으로 변환하기 전에 미리 날짜 형식이 맞는지 체크를 한 후 변환을 해야 오류 발생을 방지할 수 있다. 오라클 12c R2부터는 형식 체크 함수가 생겨서 쉽게 체크할 수 있지만, 이하 버전에서는 형식 체크 방법을 직접 구현해야 한다. 문자열 날짜 형식 체크 방법 3가지 VALIDATE_CONVERSION 함수를 사용하는 방법 (오라클 12c R2 이상) IS_DATE 사용자 정의 함수를 생성하여 사용하는 방법 (모든 버전) REGEXP_INSTR 정규식 함수를 사용하는 방법 (오라클 10g 이상) VAL..
오라클에서 문자열에서 특정 문자의 개수를 구하기 위해서는 아래의 2가지 방법을 사용하면 쉽게 구할 수 있다. 특히 값을 특수문자로 구분하여 하나의 컬럼에 저장하였을 경우 값의 개수를 구할 때 유용하게 사용할 수 있다. REGEXP_COUNT 함수를 이용하는 방법 (오라클 11g 이상) SELECT REGEXP_COUNT('A/B/C/D', '/') FROM dual 위의 예제는 문자열에 포함된 슬래쉬("/") 개수를 세는 방법이다. 오라클 11g부터 사용 가능한 REGEXP_COUNT 정규식 함수를 사용하여 문자열에 포함된 특정 문자 개수를 쉽게 구할 수 있다. 오라클 버전이 11g 아래 버전이면 아래 두 번째 방법을 사용해야 한다. SELECT REGEXP_COUNT('A,B,C', ',') --쉼표 ..
오라클에서 그룹별로 합계를 구할 때는 SUM 함수를 사용한다. 기본적으로 GROUP BY 절을 사용하여 그룹별로 합계를 구하며, GROUP BY 절을 사용하지 않고 OVER 절을 사용하면 데이터를 그룹화하지 않고 조회된 각 행에 그룹별 합계를 표시할 수 있다. 합계나 소계를 새로운 행으로 표시하고 싶다면 ROLLUP, GROUPING SETS을 사용하면 된다. 그룹별 합계 - 1 (GROUP BY 절) SELECT SUM(sal) FROM emp SELECT 절에 집계 함수(SUM, MAX, COUNT 등)만 있으면 GROUP BY 절을 사용하지 않아도 집계가 된다. 직군별 합계 SELECT job , SUM(sal) FROM emp GROUP BY job SELECT 절과 GROUP BY 절에 그룹별로..
오라클에서 문자열을 뒤에서부터 자르기 위해서는 SUBSTR 함수를 사용하면 된다. SUBSTR 함수의 시작 위치 부분에 음수로 자를 길이를 대입하면 문자열의 오른쪽에서부터 문자열을 자른다. MSSQL의 RIGHT 함수와 비슷한 기능이다. 문자열 뒤에서 자르는 방법 SELECT SUBSTR('Oracle Database', -8) FROM dual SUBSTR 함수에 시작위치를 음수("-")로 대입하면 뒤에서부터 문자열을 자를 수 있다. SUBSTR("문자열", "자를 길이(음수)") 문자열의 길이가 일정하지 않은 경우 SELECT SUBSTR('010-4321-9876', -4) , SUBSTR('010-321-6789', -4) FROM dual 문자열의 길이가 일정하지 않지만 뒤자리의 길이가 일정한 ..
오라클에서 문자열을 숫자형으로 변환하기 위해서는 TO_NUMBER 함수와 CAST 함수를 사용할 수 있다. 문자열에 수치 값 외에 문자가 포함되어 있으면 형 변환 시 오류가 발생하는데, 오류를 미리 예방하기 위해서 다양한 방법을 사용할 수 있으며 자주 사용하는 방법 몇 가지를 설명해 두었으니 아래를 참고하면 된다. 문자열 숫자 변환 1. TO_NUMBER 함수 SELECT TO_NUMBER('12345') , TO_NUMBER('12345.67') FROM dual TO_NUMBER 함수를 사용하면 문자열을 쉽게 숫자(정수, 실수)로 변환이 가능하다. 2. CAST 함수 SELECT CAST('12345' AS NUMBER(10)) , CAST('12345.56' AS NUMBER(10)) , CAST(..
오라클에서 특정 문자열의 포함 여부를 확인할 때 LIKE 연산자와 INSTR 함수를 사용한다. LIKE 연산자는 조건절(WHERE)에서 특정 문자열이 포함된 데이터를 찾을 때 사용하며, INSTR 함수는 특정 문자열이 포함된 위치를 반한 하므로 특정 문자열을 자를 때 많이 사용한다. LIKE 연산자를 사용하여 문자열 포함 여부 확인 SELECT * FROM emp WHERE ename LIKE '%MI%' LIKE 연산자는 조건절(WHERE)에서 컬럼에 특정 문자열이 포함되었는지 확인할 때 많이 사용한다. 문자열을 찾으면 true, 못찾으면 false를 반환한다. CASE 표현식에 사용 SELECT empno , ename , CASE WHEN ename LIKE '%MI%' THEN 'Y' ELSE '..
오라클에서 문자열의 길이를 구하기 위해서는 LENGTH 함수를 사용한다. LENGTH 함수는 입력된 문자열의 글자 수를 반환하고 LENGTHB 함수는 바이트 수로 반환한다. LENGTHB 함수는 시스템 문자셋 설정에 따라서 한글을 2byte 또는 3byte로 계산하므로 주의해야 한다. LENGTH 함수 (글자 수) SELECT LENGTH('오라클') , LENGTH('오라클 SQL') FROM dual LENGTH 함수를 사용하면 영문, 한글, 공백(특수문자 등) 모두 1자리로 계산된다. LENGTH 함수는 조건절이나 조건문에서 많이 사용하므로 아래의 예제를 참고하기 바란다. 조건절(WHERE)에 사용 SELECT ename , job , deptno FROM emp WHERE LENGTH(ename)..
오라클에서 최댓값과 최솟값을 구하기 위해서는 집계 함수 MAX(최대값), MIN(최소값)를 사용하면 된다. 집계 함수는 주로 GROUP BY 절과 함께 많이 사용하며, SELECT 절에 집계 함수만 있다면 GROUP BY 절이 없어도 사용이 가능하다. 집계함수(MAX, MIN)는 WHERE 절에 직접 사용은 할 수 없으며, 서브 쿼리와 같은 방법을 사용해야 한다. 최대값(MAX) 구하기 SELECT MAX(sal) FROM emp 위의 예제는 사원 테이블 전체에서 최고 급여를 조회한 결과이다. SELECT job , MAX(sal) FROM emp GROUP BY job 위의 예제는 직군별 최고 급여를 조회한 결과이다. GROUP BY 절을 사용하여 직군(job) 별로 급여(sal)의 최대값(MAX)을 ..
오라클 9i R2부터 WITH 절을 사용할 수 있도록 기능이 추가되었다. WITH 절은 임시 테이블 또는 가상 테이블이라고 생각하면 된다. 반복되는 서브쿼리 블록을 하나의 WITH 절 블록으로 만들어서 사용하거나, 긴 문장의 서브 쿼리를 WITH 절로 만들어서 SELECT 문의 가독성을 높일 수 있다. WITH AS를 여러 개 사용하기 위해서는 쉼표를 붙여서 여러 개 선언하면 된다. 오라클 12c부터 WITH 절에 함수와 프로시저를 선언할 수 있으니 아래를 참고하면 된다. WITH 절 사용법 WITH emp_w1 AS ( SELECT deptno , SUM(sal) AS sal FROM emp GROUP BY deptno ) SELECT a.deptno , b.dname , a.sal FROM emp_w..