내장함수

혜쿰·2023년 7월 24일
4
  • 내장함수(Built_in function) - 데이터 아이템 조작의 효율성 증진

  • 단일 행 함수 : 각 행 단위로 함수 결과가 진행

  • 문자 함수

    SELECT LOWER('Hello') -- 소문자
    , UPPER('Hello') -- 대문자
    , CONCAT('Hello','World') FROM DUAL; -- 문자열 합치기
    SELECT SUBSTR('Hello World',3) -- 3번째 부터 다나오기
    ,SUBSTR('Hello World',3,2) -- 3번째 부터 두글자
    ,SUBSTR('Hello World',-3,2); -- 뒤에서 3번째부터 두글자
    SELECT LENGTH('Hello World') -- 글자수
    ,INSTR('Hello World','e'); -- e가 몇번째에 나오는 지
    SELECT LOCATE('o','Hello World'), -- 처음부터 글자 찾기
    LOCATE('o','Hello World', 6); -- 6번째부터 글자 찾기
    SELECT TRIM(' aabb bbaa ') -- 문자열 양쪽 의미 없는 공백 자르기 / 가운데는 의미 있는 공백
    ,LTRIM(' aabb bbaa ') -- 왼쪽 자르기
    ,RTRIM(' aabb bbaa ') ; -- 오른쪽 자르기
    SELECT REPLACE('010.111.1234','.','-'); -- . -> - 점을 하이픈으로 대체

  • 문제 : 직원 테이블에서 이름에 '이'가 포함된 직원이 있으면 '이'부터 두 글자만 출력. 마지막에 '이'가 있으면 '이' 한 글자만 출력

    SELECT jikwon_name, SUBSTR( jikwon_name, INSTR( jikwon_name, '이'),2) FROM jikwon WHERE jikwon_name LIKE '%이%' ;

  • 숫자 함수

    SELECT ROUND(45.6789), -- 정수로 반올림
    ROUND(45.6789, 0), -- 정수로 반올림
    ROUND(45.6789, 2), -- 소수 둘째자리까지 반올림
    ROUND(45.6789, -1); -- 1의 자리에서 반올림
    SELECT CEILING(4.7), -- 올림
    FLOOR(4.7); -- 버림
    SELECT jikwon_name, jikwon_pay, ROUND(jikwon_pay *0.025,0) AS tex FROM jikwon;
    SELECT TRUNCATE(45.5789,0), TRUNCATE(45.5789,1), TRUNCATE(45.5789,-1); -- 소수점을 기준으로 절삭
    SELECT MOD(15, 2), 15 %2, 15 MOD 2; -- 3개다 나머지

  • 날짜 함수

    SELECT NOW(), SYSDATE(), CURDATE(), CURRENT_DATE() + 0; -- 마지막은 숫자로 표현됨
    SELECT ADDDATE('2023-7-24', 3), SUBDATE('2023-7-24',3), ADDDATE('2023-7-24',3); -- 윤년 체크됨
    -- SUBDATE() 날짜 빼기 / ADDDATE() 날짜 더하기
    SELECT NOW(), DATE_ADD(NOW(),INTERVAL 3 MINUTE); -- 분 더하기
    SELECT DATE_ADD(NOW(),INTERVAL 5 DAY); -- 일 더하기
    SELECT DATE_ADD(NOW(),INTERVAL 2 MONTH); -- 달 더하기
    SELECT NOW(), DATE_SUB(NOW(),INTERVAL 3 YEAR); - 년 빼기
    SELECT NOW(), DATE_SUB(NOW(),INTERVAL -3 YEAR);
    SELECT DATEDIFF(NOW(), '2023-7-7'), DATEDIFF(NOW(),'2030-7-7'); -- 날짜 차이
    SELECT TIMESTAMPDIFF(HOUR,'2022-1-1',NOW()), -- 날짜 차이
    TIMESTAMPDIFF(QUARTER,'2022-1-1',NOW()); -- 분기 차이

  • date_format : 날짜형 자료 서식을 이용해 날짜를 문자열로 출력

    SELECT DATE_FORMAT(NOW(), '%Y%m%d')AS a, DATE_FORMAT(NOW(), '%Y-%m-%d %H시%i분 %s초') AS b;
    SELECT DATE_FORMAT(NOW(), '%d'), DATE_FORMAT(NOW(), '%'), DATE_FORMAT(NOW(), '%a'), DATE_FORMAT(NOW(), '%W');
    SELECT jikwon_name, jikwon_ibsail, DATE_FORMAT(jikwon_ibsail, '%W') FROM jikwon;

  • STR TO DATE : 문자를 날짜형식으로 변환, oracle의 TO_DATE()와 유사

    SELECT STR_TO_DATE('2023-3-12','%Y-%m-%d');

  • 숫자 format 함수

    SELECT FORMAT(1234.567, 2),FORMAT(1234.567, 0),LPAD(56,7,0), RPAD(56,7,0) ;

format(a,b) : b자리만큼 소수 없애기, LPAD(a,b,c) : a의 왼쪽을 b만큼 c로 채우기, RPAD(a,b,c) : a의 오른쪽을 b만큼 c로 채우기

0개의 댓글