데이터베이스(DB: Database)/SQL

[SQL] Oracle과 MySQL의 문법 차이 정리

잇트루 2023. 4. 19. 12:59
반응형

현재 날짜 확인

  • Oracle : SYSDATE
  • MySQL : now()

 

 

날짜 포맷

Date to String

Oracle : TO_CHAR(날짜, ‘형식’)

TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')
-- 2023-04-18 -> 20230418162030

TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')
-- 2023-04-18 -> 2023-04-18 16:20:30

TO_CHAR(SYSDATE, 'MM-DD-YYYY')
-- 2023-04-18 -> 04-18-2023
  • 문자열에 따라 표현의 차이가 있음
    • YYYY : 4자리 년도
    • YY : 2자리 년도
    • DD : 31일 형태의 일
    • DDD : 366일 형태의 일
    • HH24 : 24시 형태의 시
    • HH12 : 12시 형태의 시

 

MySQL : DATE_FORMAT(날짜, ‘형식’)

DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
-- 2023-04-18 -> 20230418162030

DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')
-- 2023-04-18 -> 2023-04-18 16:20:30

DATE_FORMAT(NOW(), '%m-%d-%Y')
-- 2023-04-18 -> 04-18-2023
  • % 기호와 대소문자마다 표현의 차이가 있음
    • %Y : 4자리 년도, 2023
    • %y : 2자리 년도, 23
    • %M : 영어로 월 표현
    • %m : 숫자로 월 표현
    • %H : 24시간 형태의 시
    • %h : 12시간 형태의 시
    • %T : hh:mm:ss

 

 

요일

Oracle : TO_CHAR()

  • 요일을 1~7로 인식 (1부터 일, 월, 화, 수, 목, 금, 토, 일)
TO_CHAR(SYSDATE - 1, 'D')
-- 3 -> 2

TO_CHAR(SYSDATE + 1, 'D')
-- 3 -> 4

TO_CHAR(SYSDATE - 1, 'YYYY-MM-DD HH24:MI:SS')
-- 2023-04-17 16:20:30

TO_CHAR(SYSDATE + 1, 'YYYY-MM-DD HH24:MI:SS')
-- 2023-04-19 16:20:30

 

MySQL : DATE_ADD(), DATE_SUB()

  • 요일을 0~6으로 인식 (0부터 일, 월, 화, 수, 목, 금, 토, 일)
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY), '%w')
-- 2 -> 1

DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%w')
-- 2 -> 3

DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%s')
-- 2023-04-17 16:20:30

DATE_FORMAT(DATE_ADD(NOW(), INTERVAL 1 DAY), '%Y-%m-%d %H:%i:%s')
-- 2023-04-19 16:20:30

 

String To Date

Oracle : TO_DATE(’문자열’, ‘형식’)

TO_DATE('20230418162030', 'YYYYMMDDHH24MISS')
-- 20230418162030 -> 2023-04-18 16:20:30

 

MySQL : STR_TO_CHAR(’문자열’, ‘형식’)

STR_TO_DATE('20230418162030', '%Y%m%d%H%i%s')
-- 20230418162030 -> 2023-04-18 16:20:30

 

 

NULL 값 확인

Oracle : NVL(컬럼, ‘문자열’)

SELECT NVL(NAME, '없음') AS NAME
FROM MEMBER
  • NAME 컬럼의 값이 NULL인 경우 ‘없음’으로 대치

 

MySQL : IFNULL(컬럼, ‘문자열’)

SELECT IFNULL(NAME, '없음') AS NAME
FROM MEMBER
  • NAME 컬럼의 값이 NULL인 경우 ‘없음’으로 대치

 

 

형 변환

Oracle

  • TO_CHAR() - Date to String 또는 Number to String
TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')

TO_CHAR(12345)

TO_CHAR(PRICE)
  • TO_NUMBER(‘문자열’) - String to Number
TO_NUMBER('12345')

TO_NUMBER(PRICE)
  • TO_DATE(’문자열’, ‘형식’) - Stringto Date
    • 날짜 포맷 부분 참고

 

MySQL

  • CAST(a AS b)
CAST(1234 AS CHAR)

CAST('1234' AS SIGNED)

CAST('2023-04-18 16:20:30' AS DATE)

CAST(NOW() AS SIGNED)
  • CONVERT(a, b)
CONVERT(1234, CHAR)

CONVERT('1234', SIGNED)

CONVERT('2023-04-18 16:20:30', DATE)

CONVERT(NOW(), CHAR)

 

 

문자 합치기

Oracle : CONCAT(’A’, ‘B’), ‘A’ || ‘B’ || ‘C’ …

'Hello' || ' ' || 'World'
-- Hello World

CONCAT(CONCAT('Hello', ' '), 'World')
-- Hello World

 

MySQL : CONCAT(’A’, ‘B’, ‘C’, …)

CONCAT('Hello', ' ', 'World')
-- Hello World

CONCAT('Hello ', 'World')
-- Hello World

CONCAT('H', 'e', 'l', 'l', 'o')
-- Hello

 

 

페이징처리

Oracle : ROWNUM

SELECT (
	SELECT *
	FROM MEMBER
	ORDER BY NAME
)
WHERE ROWNUM <= 5;

SELECT (
	SELECT *
	FROM MEMBER
	ORDER BY NAME
)
WHERE ROWNUM 5 BETWEEN 10;

 

MySQL : LIMIT

SELECT *
FROM MEMBER
ORDER BY NAME LIMIT 5;

SELECT *
FROM MEMBER
ORDER BY NAME LIMIT 5, 10;

 

 

시퀀스

Oracle : NEXTVAL, CURRVAL

SEQ.NEXTVAL
-- 시퀀스의 값을 증가 시킴

SEQ.CURRVAL
-- 현재 시퀀스

 

Mysql

  • 시퀀스 기능이 존재하지 않음.
반응형