오늘을 기준으로 이전(직전) 일요일에 해당하는 날짜를 확인해야 하는 경우가 있다. 이럴때는 NEXT_DAY 함수를 활용하여 날짜를 구할 수 있다. NEXT_DAY 함수는 기준일자의 다음에 오는 날짜를 구하는 함수이지만 기준일자에서 8일을 빼주면 이전 요일에 해당하는 날짜를 구할 수 있다. 기준일자를 제외하고 이후 날짜 중 조건에 주어진 요일에 해당하는 날짜를 반환 한다. 함수 : NEXT_DAY('기준일자', '찾을요일') SELECT SYSDATE , NEXT_DAY(SYSDATE-8,'SUN') prev_sunday --이전 일요일 , NEXT_DAY(SYSDATE,'SUN') next_sunday --다음 일요일 FROM DUAL 요일은 아래의 표에서 어떤 값을 넣어도 동일하게 동작 한다. SELE..
오라클에서 문자열을 합치기 위해서는 CONCAT 함수 또는 "||" 파이프 두개를 사용한다. CONCAT 함수는 여려개의 문자열을 합칠 때 조금 번거로운 면이 있기 때문에, 실무에서는 "||"를 많이 사용하는 편이다. 아래의 쿼리 예시를 보면 쉽게 이해할 수 있다. SELECT CONCAT('가나다라', '아자차카') , '가나다라' || '아자차카' FROM DUAL CONCAT 함수를 사용하는 방법 CONCAT 함수를 사용하여 3개 이상의 문자열을 합칠경우 함수를 여러번 겹쳐서 사용해야 하므로 가독성이 많이 떨어진다. "||" 를 사용하는 방법 "||" 를 사용하여 여러개의 문자열을 합칠경우 동일한 패턴으로 문자열을 합치기 때문에 가독성이 좋다. 오라클 Group By 문자열 합치기 3가지 방법 오라..
MySql이나 postgreSQL에서 사용하는 LIMIT절을 오라클에서 사용하고 싶을 때가 있다. 그러나 아쉽게도 오라클에서는 LIMIT를 사용할수 없다. 오라클에서 LIMIT 대신 ROWNUM을 사용하면 된다고 하는데, LIMIT와 ROWNUM은 사용법과 용도가 전혀 다르다는것을 알고 사용해야 한다. LIMIT는 쿼리가 ORDER BY 절까지 모두 실행 후 해당 결과에서 원하는 행의 데이터를 가져오는 것이며, ROWNUM은 쿼리가 완전히 수행되지 않은 원 데이터의 정렬순서대로 번호를 매기기 때문에 전혀 다른 결과가 출력된다. ※ ROWNUM은
UPPER(대문자), LOWER(소문자) 변환 함수는 오라클에서 쿼리 작성시 꼭 필요한 함수 중 하나이다. 그리고 INITCAP 함수는 영문 단어의 첫 번째 문자를 대문자로 나머지 문자를 소문자로 변환하는 함수 이다. UPPER 함수 (대문자 변환) SELECT empno , UPPER(ename) AS ename , job FROM emp 특정 칼럼의 문자열을 대문자로 변환 한다 SELECT empno , ename , job FROM emp WHERE UPPER(ename) LIKE '%' || UPPER('Jones') || '%' 조건절에서 LIKE 연산자 사용시 대소문자 상관없이 검색할 때 사용할 수 있다. LOWER 함수 (소문자 변환) SELECT empno , LOWER(ename) AS ..
오라클 날짜타입의 값에서 시간을 빼거나 더하기 위해서는, 기본으로 제공해주는 오라클 함수가 없기 때문에 별도의 연산작업을 해줘야 한다. 시간, 분, 초를 더하기나 빼기 위해서는 일반적으로 1/24 [1시간], 1/(24*60) [1분], 1/(24*60*60) [1초]를 사용하여 연산을 한다. 그러나 INTERVAL이라는 오라클 키워드를 조금 더 명시적으로 쿼리를 작성할 수 있다. 일반수식을 이용하는 방법 WITH temptable AS ( SELECT to_date('2019-08-21 08:00:00', 'yyyy-mm-dd hh24:mi:ss') curtime FROM dual ) SELECT curtime , curtime + 5/24 hour --5시간 더하기 , curtime + 5/(24*6..
오라클 SQL에서 소수점 자리수를 지정하기 위해서 ROUND 함수를 사용한다. ROUND 함수는 특정 소수점을 반올림하고 나머지를 버리는 함수 이다. 소수점을 반올림하지 않고 절사만 원한다면 TRUNC 함수를 사용해야 한다. ROUND 함수- 함수 : ROUND("값", "자리수") 소수점 반올림-1 (소수점 첫째자리) SELECT ROUND(1235.543) --① , ROUND(1235.443) --② , ROUND(1235.443, 0) --③ FROM dual①,②,③ 모두 소수점 첫번째 자리수를 반올림 한다. ①은 소수점 첫번째 자리수가 5이므로 반올림 되었고, ②는 4이므로 그냥 버려졌다. ③은 ①,②와 동일하게 소수점 첫번째 자리수를 반올림하는 것이며 두번째 파라미터(0)은 생략이 가능하다...
오라클에서 MONTHS_BETWEEN 함수를 사용하여 쉽게 나이를 계산 할 수 있다. 만나이 계산 방법을 많이 사용하며, 이것을 응용하여 한국나이를 계산할 수있다. 1세 미만의 나이는 개월수 또는 일수로 계산할 수 있는 쿼리도 있으니 아래를 참고하면 된다. 만나이 계산 쿼리 SELECT TRUNC(MONTHS_BETWEEN(TRUNC(SYSDATE), TO_DATE('19890326','YYYYMMDD')) / 12) FROM DUAL 한국나이 계산 쿼리 SELECT MONTHS_BETWEEN(TRUNC(SYSDATE,'YEAR'), TRUNC(TO_DATE('19890326','YYYYMMDD'),'YEAR')) /12 +1 FROM DUAL※ 한국나이 = 현재년도 - 출생년도 + 1 만나이, 개월수,..
오라클에서 문자열을 치환하기 위해서는 대부분 replace 함수와 translate 함수를 사용 한다. translate 함수는 사용방법을 정확히 숙지하지 않으면 너무 어렵게 느껴지는 함수이기도 하다. 함수사용법 : translate('문자열', '대상문자', '변환문자') 대상문자와 변환문자는 1:1로 변환이되며, 대상문자에는 있는데 변환문자에는 없으면 해당 문자는 제거 된다.replace 함수에서는 특정문자를 제거할때 변환문자에 ''을 사용하여 제거하지만, translate 함수에서는 변환문자에 ''을 사용할 수 없다. 예) translate('010-1234-5678', '-', '') : 변환문자에 ''사용할 수 없음 사용예제 SELECT TRANSLATE('hello world!!!', 'hw'..
오라클에서 특정 문자열을 치환하거나 제거하기 위해서는 REPLACE 함수를 사용하면 된다. 단순 문자열 치환 외에도 엔터값 제거, 전화번호 특수문자 제거 등 다양한 상황에서 사용할 수 있다. 오라클 10g부터 정규식 사용이 가능한 REGEXP_REPLACE 함수가 추가되었다. 목차 특정문자 치환 특정문자 제거 엔터값, 탭문자 제거 전화번호 구분자 제거 REGEXP_REPLACE 함수 (정규식) 특정문자 치환 SELECT REPLACE('Oracle Database', 'Oracle', 'Ora') AS result1 , REPLACE('Oracle Database', 'Database', 'DB') AS result2 , REPLACE('Oracle Database', 'D', 'd') AS result..
DECODE 함수는 오라클 쿼리에서 가장 많이 사용하는 함수 중 하나이다. 표준 SQL 함수가 아니라서 사용을 꺼려하기도 하지만 잘 사용하면 아주 편하기 때문에 유용하다. 최근에는 CASE WHEN 구문 사용을 많이 권장하기도 한다. DECODE 함수는 프로그래밍에서의 if else 와 비슷한 기능을 수행한다. 간단한 사용방법은 아래와 같다. 예) DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3..........) WITH temp AS ( SELECT 'M' gender FROM dual UNION ALL SELECT 'F' gender FROM dual UNION ALL SELECT 'X' gender FROM dual ) SELECT gender , DECODE(gender,..