|
oracle |
mysql |
|
|
|
NVL(EPSD_NO,'0') |
|
select IFNULL(null,'if it is null'); CASE WHEN EPSD_NO IS NULL OR EPSD_NO = '' THEN '0' ELSE EPSD_NO END |
오라클은 ''을 null로 삽입하지만, mySQL은 ''은 그대로 ''로 삽입함 이것때문에 문제소지 없는지 확인필요함 |
|
decode( 1,1,'true','false') |
IF(조건, '참','거짓'))
case when 조건 then 결과 else 결과 end |
SELECT IF (5<10, '크다','작다') select case when 1=1 then 'true' else 'false' end; |
|
|
WHERE ROWNUM <= 30 |
|
LIMIT 30 |
정렬후 limit할 경우, 오라클은 limit이 where절에 들어가고(WHERE ROWNUM<x) 정렬보다 먼저 적용되므로 정렬후 inner view로 싸고 limit해야 하나 mySQL은 limit이 정렬후에 적용되어 inner view로 감쌀 필요가 없음 이건 mySQL이 더편함 |
string 관련
|
select LENGTHB('가나다') from dual; select LENGTH('가나다') from dual; |
LENGTH(str) CHAR_LENGTH(str) |
select LENGTH('가나다'); /*byte legnth*/ select CHAR_LENGTH('가나다'); |
9 3 |
'A'||'B'||'C |
CONCAT(str1,str2,...) CONCAT_WS(separator,str1,str2,...) |
select CONCAT( 'A', 'B', 'C'); select CONCAT_WS(',','1','2','3'); |
ABC 1,2,3 |
SUBSTR(str, pos) |
SUBSTRING(str, pos) = SUBSTRING(str FROM pos) SUBSTRING(str, pos, len) = SUBSTRING(str FROMpos FOR len) |
SELECT SUBSTRING('123456',3); /* index는 모두 1부터 시작*/ SELECT SUBSTRING('123456',3,2); SELECT SUBSTRING('123456', -3); /* 음수일때는 끝에서부터 셈*/ SELECT SUBSTRING('123456', -5, 4); |
3456 34 456 2345 |
|
SUBSTRING_INDEX(str,delim,count) |
SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', 1); SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', 2); SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', 5); SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', -2); SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', 0); |
AB AB*CD AB*CD*EF*G EF*G '' |
INSTR SELECT INSTR('AB*CD*EF*G', '*', 4, 2 ) FROM dual 4th 문자부터 시작하여 2nd *의 위치 반환 없으면 0 반환 |
|
|
|
date 관련 |
sysdate trunc(sysdate) ? |
NOW() CURDATE() CURTIME() |
select NOW(); /*GMT 기준시로 나옴*/ select CURDATE(); /*GMT 기준시로 나옴*/ select CURTIME(); /*GMT 기준시로 나옴*/ |
2015-07-16 05:05:54 2015-07-16 05:05:54 |
TO_DATE( time ,'yyyymmddhh24miss') |
STR_TO_DATE( str ,'format') |
select STR_TO_DATE(now(),'%Y-%m-%d'); |
2nd 인자가 string의 format에 맞아야 함 |
|
DATE(date) TIMESTAMP(date) UNIX_TIMESTAMP(date) |
select DATE(now()) select TIMESTAMP(now()) select UNIX_TIMESTAMP(now()) |
date에서 time자르고 day까지 반환 time까지 반환 sec단위로 반환? |
|
EXTRACT(unit FROM date) |
select EXTRACT(year FROM now()) |
|
TO_CHAR( TIME,'yyyymmddhh24mi') |
DATE_FORMAT(date,format) |
select DATE_FORMAT(now(),'%b %d %Y %h:%i %p'); select DATE_FORMAT(now(),'%d %b %y %k:%i'); select DATE_FORMAT(now(),'%d %b %Y %T:%f'); |
Jul 16 2015 06: 18 AM 16 Jul 15 6: 23 16 Jul 2015 06:19:33:000000 |
sysdate + hour/24 |
DATE_ADD(date,INTERVAL expr type) |
select DATE_ADD(now(), INTERVAL 12 HOUR) |
|
sysdate - day |
DATE_SUB(date,INTERVAL expr type) |
select DATE_SUB(now(),INTERVAL 5 DAY) |
|
오늘 14:10 |
|
select DATE_ADD(DATE_ADD(current_date, interval 14 hour), interval 10 minute) select current_date + interval 14 hour + interval 10 minute |
|
어제 14:10 |
|
select DATE_ADD(DATE_ADD(current_date, interval -10 hour), interval 10 minute) select current_date - interval 10 hour + interval 10 minute |
|
ROUND((COMPLT_DATE - GEN_DATE) * 24 * 60, 0) min |
DATEDIFF(date1,date2) |
select TIMEDIFF(COMPLT_DATE, GEN_DATE) from TB_IC_DMON_SCHD_HIST |
|
ROUND((END_TIME - STRT_TIME) * 24 * 60 * 60, 0) sec |
|
ROUND(UNIX_TIMESTAMP(IBS.END_TIME) - UNIX_TIMESTAMP(IBS.STRT_TIME), 0) |
총 걸린 second |
|
|
select CONVERT_TZ(now(),'+00:00','+09:00'); |
timezone변경: GMT를 KST로 |
|
SELECT TO_CHAR( 11 ) FROM DUAL; SELECT TO_NUMBER( '-11' ) FROM DUAL; |
|
select CAST( 11 AS CHAR ); select CAST( '-11' AS SIGNED ); |
|
|
select * from A, B where 조건 |
|
select * from A, B where 조건; select * from A join B on 조건; select * from A inner join B on 조건; select * from A natural join B; (A, B에 같은 이름의 컬럼이 있을 때만 동작) |
inner join |
|
select * from A, B where 조건( + ) |
|
select * from A left outer join B on 조건; select * from A left outer join B on 조건 left outer join C on 조건; select * from A right outer join B on 조건; mySQL은 full outer join 지원안함 |
outer join |
|
|
|
select * from A cross join B; |
cross join |
|
|
|
|
|