오라클에서 문자열을 날짜형 데이터로 형 변환을 하기 위해서는 TO_DATE 함수를 사용하면 된다. TO_DATE("문자열", "날짜 포맷") 아래의 예제를 보면 쉽게 이해할 수 있다. SELECT TO_DATE('2021-12-12', 'YYYY-MM-DD') , TO_DATE('2021-12-12 17:10:00', 'YYYY-MM-DD HH24:MI:SS') FROM dual 오라클에서는 날짜 포맷의 대소문자를 구분하지 않는다. 'YYYY-MM-DD HH24:MI:SS' → 'yyyy-mm-dd hh24:mi:ss'로 변경해도 정상적으로 작동한다. 날짜의 시간이 12시간 단위면 hh24:mi:ss → hh:mi:ss로 변경하면 된다. SELECT TO_DATE('20211212', 'YYYYMMDD'..
오라클에서 날짜의 시간을 오전, 오후로 구분하기 위해서는 TO_CHAR 함수를 사용하면 된다. TO_CHAR('날짜', 'AM')을 사용하면 AM, PM으로 변환되어 값이 반환 된다. 오라클의 NLS_DATE_LANGUAGE의 언어 설정에 따라서 영문(AM, PM) 또는 한글(오전, 오후)로 반환될 수 있으니 이점을 유의해야 한다. SELECT TO_CHAR(SYSDATE, 'AM') FROM dual TO_CHAR('날짜', 'AM')를 사용하여 오전(AM), 오후(PM)를 구분할 수 있다. SELECT TO_CHAR(SYSDATE, 'AM') , TO_CHAR(SYSDATE, 'PM') FROM dual TO_CHAR(SYSDATE, 'AM'), TO_CHAR(SYSDATE, 'PM') 어느 것을 사..
오라클에서 분석함수를 사용할 때 PARTITION BY를 사용하여 그룹으로 묶어서 연산을 할 수 있다. GROUP BY 절을 사용하지 않고, 조회된 각 행에 그룹으로 집계된 값을 표시할 때 OVER 절과 함께 PARTITION BY 절을 사용하면 된다. 위의 예제를 보면 데이터를 조회한 각 행에 분석함수로 집계한 값을 추가로 각 행에 표시하며, 조회된 데이터는 GROUP BY 절을 사용하지 않았기 때문에 데이터가 변형되지 않는다. 집계된 값은 GROUP BY 절을 사용할 때와 동일한 값이며, 분석함수를 사용하지 않고 값을 표시할 때는 서브 쿼리를 사용하여 해당 값을 표시해야 하기 때문에 쿼리문이 복잡해진다. 분석함수([칼럼]) OVER(PARTITION BY 칼럼1, 칼럼2... [ORDER BY 절] ..
오라클에서 검색된 결과의 행을 정렬할 때는 ORDER BY 절을 사용한다. 정렬 방법에는 오름차순 정렬(ascending sort)과 내림차순(descending sort) 정렬 두 가지가 있다. 오름차순은 작은 값부터 큰 값으로 정렬하며, 내림차순은 큰 값부터 작은 값으로 정렬된다. SELECT 컬럼명 FROM 테이블명 WHERE 조건식 GROUP BY 컬럼명 ORDER BY 컬럼명1 [ASC|DESC], 컬럼명2 [ASC|DESC], 컬럼명3 [ASC|DESC] ... 아래는 자주 사용하는 정렬 방법을 정리하였다. 기본 사용법 오름차순 정렬 (ASC) SELECT empno , ename , job , sal FROM emp WHERE deptno = 30 ORDER BY sal -- ORDER BY..
오라클에서 문자열의 날짜를 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 '..