새발블로그
MySQL <-> Oracle SQL 벼락치기ㅠ.ㅠ 본문
1. LIMIT / OFFSET
MySQL
LIMIT 5 OFFSET 10
Oracle
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY;
2. 날짜 포맷 (DATE_FORMAT → TO_CHAR)
MySQL
DATE_FORMAT(dt, '%Y-%m')
Oracle
TO_CHAR(dt, 'YYYY-MM')
3. 날짜 필터링
Oracle
WHERE created_at >= DATE '2022-10-01' AND created_at < DATE '2022-11-01';
MySQL DATE(created_at) 같은 함수 감싸기는 금지
4. LEFT / RIGHT → SUBSTR
Oracle
SUBSTR(str, 1, 3) -- MySQL : LEFT
SUBSTR(str, -3) -- MySQL : RIGHT
5. CONCAT → ||
Oracle
first || ' ' || last
2개일 때는 concat가능하다하는데..
6. IF / IFNULL
MySQL
IF(a,b,c)
IFNULL(col,'N/A')
Oracle
CASE WHEN a THEN b ELSE c END NVL(col,'N/A')
NVL(col, 'A') -- MySQL IFNULL
NVL2(col, 'A','B') -- MySQL 없음
COALESCE(c1,c2,c3) -- 표준 SQL
NULLIF(a,b) -- 동일
7. REGEXP → REGEXP _LIKE
Oracle
REGEXP_LIKE(email, '^[A-Za-z0-9._-]+$')
❗ Oracle의 정규식은 기본 대소문자 구분
8. BIT 연산 (& → BITAND)
MySQL
(skill & 256) > 0
Oracle
BITAND(skill, 256) > 0
9. GROUP BY 날짜 그룹 → TRUNC
MySQL
DATE(created_at)
Oracle
TRUNC(created_at)
10. ORDER BY RAND()
MySQL
ORDER BY RAND()
Oracle
ORDER BY DBMS_RANDOM.VALUE
11. 문자열 길이/부분 문자열
| MySQL | Oracle |
| LENGTH | LENGTH |
| SUBSTRING | SUBSTR |
| REPLACE | REPLACE |
| CONCAT | || |
Oracle은 문자열 비교 시 대소문자 구분!
WHERE LOWER(name) = LOWER('kim')
12. Oracle 날짜 함수
SYSDATE -- 현재 날짜 + 시간
SYSTIMESTAMP -- 밀리초 포함
MySQL의 NOW(), CURDATE() 대체.
13. DISTINCT (다중 컬럼)
MySQL
COUNT(DISTINCT CONCAT(a,b))
Oracle
COUNT(DISTINCT (a,b))
14. HAVING 절에서 별칭 사용 금지
MySQL
HAVING cnt >= 5
Oracle: 오류
Oracle
HAVING COUNT(*) >= 5
15. Oracle 전용 계층 쿼리 (CONNECT BY)
Oracle
SELECT id, parent_id, LEVEL
FROM tree
START WITH parent_id IS NULL
CONNECT BY PRIOR id = parent_id;
'Server > DB' 카테고리의 다른 글
| [DB] MongoDB (0) | 2025.06.25 |
|---|---|
| [DB] 인덱스 , 쿼리 최적화, 트랜잭션 (0) | 2025.06.25 |
| [SQL] 테이블, 뷰 (1) | 2025.06.25 |
| [SQL] SQL 심화 명령어 (0) | 2025.06.25 |
| [SQL] SQL 기본 명령어 (0) | 2025.06.25 |