ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mariaDB) 내장 함수 정리
    SQL/sql 문법(mysql, mariaDB) 2024. 5. 7. 13:53

    ▤ 목차

      ✔ 1. 문자형 함수

      ⌨ substr (문자 자르기)

      SELECT SUbstr('hello World',3) FROM DUAL;

       

      SELECT SUbstr('hello World',3,6) FROM DUAL;

       

      SELECT SUBstr('hello World',-3,2) FROM DUAL;

       

      SELECT SUBstr(jikwon_name,2) FROM jikwon WHERE jikwon_no <=3;
      

       

      ⌨ 데이터 문자열 길이 length

      SELECT LENGTH('hello') FROM DUAL;

       

      ⌨ 특정 문자 위치 찾기 instr

      select instr('hello','e') FROM DUAL;

       

       

      ⌨특정 문자 채우기 LPAD/RPAD

      SELECT Lpad('hello',10,'*') FROM DUAL;
      SELECT RPAD('hello',10,'*') FROM DUAL;

       
       

      ⌨ 공백제거 TRIM

      SELECT TRIM(' aaa bbb  ') FROM DUAL; -- 양쪽
      SELECT LTRIM(' aaa bbb  ') FROM DUAL; -- 왼쪽
      SELECT RTRIM(' aaa bbb  ') FROM DUAL; -- 오른쪽

      ⌨ 문자 특정 문자 변경 LEPLACE

      SELECT REPLACE('011.111.1111','.','-') FROM DUAL;

      ✔  2. 숫자함수

      ⌨ 반올림

      SELECT ROUND(123.4567, 2) FROM DUAL;
      SELECT ROUND(123.4567) FROM DUAL;
      SELECT ROUND(123.4567,0) FROM DUAL;
      SELECT ROUND(123.4567,-1) FROM DUAL;
      SELECT ROUND(123.4567,-2) FROM DUAL;

      ⌨ 올림

      SELECT CEILING(4.3) FROM DUAL;
      SELECT CEILING(4.6) FROM DUAL;

      ⌨ 버림

      SELECT FLOOR(4.3),FLOOR(4.6) FROM DUAL;

      ⌨ TRUNCATE (버림)

      SELECT TRUNCATE(45.678,0) FROM DUAL;
      SELECT TRUNCATE(45.678,1) FROM DUAL;
      SELECT TRUNCATE(45.678,-1) FROM DUAL;

      ⌨ 나머지 구하기 MOD

      SELECT MOD(15,2) FROM DUAL;
      SELECT 15%2 FROM DUAL;
      SELECT 15 MOD 2 FROM DUAL;

      ✔ 내장함수

      ⌨ 가장 큰 값, 가장 작은 값

      #가장 큰 값 찾기
      SELECT GREATEST(3,7,12) FROM DUAL;
      # 가장 작은 값 찾기
      SELECT LEAST(3,7,12) FROM DUAL;

      ⌨ 제곱, 제곱근 

      - 제곱
      SELECT POW(3,2) FROM DUAL;
      
      - 제곱근
      SELECT SQRT(9) FROM DUAL;

       
       

      ⌨ 날짜 나타내기 CURDATE

      SELECT CURDATE(), CURDATE()+0 FROM DUAL;

      ⌨ 날짜와 시간 모두 출력하기

      SELECT NOW(), SYSDATE(), CURRENT_TIMESTAMP() FROM DUAL;

      ⌨ 날짜 더하기 , 빼기

      SELECT ADDDATE('2020-08-01', 5); -- 5일 더하기 윤년체크해준다.
      SELECT ADDDATE('2020-08-01', -30); -- 30일 빼기
      SELECT SUBDATE('2020-08-01', 3); -- 3일 빼기

       

      ⌨ DATE_ADD / DATE_SUB (, INTERVAL )

      SELECT DATE_ADD(NOW(),INTERVAL 5 MINUTE); -- 5분 더하기
      SELECT DATE_ADD(NOW(),INTERVAL 5 DAY);
      SELECT DATE_ADD(NOW(),INTERVAL 5 MONTH);
      
      SELECT DATE_SUB(NOW(),INTERVAL 5 MINUTE); -- 5분 빼기
      SELECT DATE_SUB(NOW(),INTERVAL 5 DAY);
      SELECT DATE_SUB(NOW(),INTERVAL 5 Month);
      SELECT DATE_SUB(NOW(),INTERVAL 5 YEAR);

      ⌨ 디데이 

      SELECT DATEDIFF(NOW(),'2000-5-5');

      결과가 날수로 나온다.

      ⌨ 날짜 사이 차이 구하기

      SELECT TIMESTAMPADD(unit,interval,datetime_expr)

      unit위치: HOUR, second, minute, day, week , month, Quarter, year

      SELECT TIMESTAMPDIFF(quarter,'2022-1-1','2024-05-01');
      SELECT TIMESTAMPDIFF(year,'2022-1-1','2024-05-01');

       

      ⌨ 해당 날짜 숫자데이터만 구하기

      SELECT LAST_DAY(SYSDATE())); -- 날짜
      SELECT DAYOFYEAR(SYSDATE())); -- 1월 1일부터 일수
      SELECT DAYOFWEEK(SYSDATE())); -- 이번달 주차
      SELECT DAYOFMONTH(SYSDATE()); -- 이번달 날자

       
       

      ✔ 형변환 함수 : 자동 형변환(implicit conversion) 

      ⌨ substr (문자 자르기)

      SELECT jikwon_pay*0.5, jikwon_pay*'0.5' FROM jikwon WHERE jikwon_no=1;

       

      ✔ 형변환 함수 :강제 형변환환(explicit conversion)

      날짜 관련

      ⌨ DATE_FORMAT : 날짜> 문자형

      즉, 반환값이 문자열이다.

      SELECT NOW(),
      DATE_FORMAT(NOW(), '%y%m%d'),
      DATE_FORMAT(NOW(), '%y-%m-%d'),
      DATE_FORMAT(NOW(), '%y년%m월%d일'),
      DATE_FORMAT(NOW(), '%H시%i분%S초');

       

      SELECT NOW(),
      DATE_FORMAT(NOW(), '%d'), -- 1달중
      DATE_FORMAT(NOW(), '%j'), -- 1년중 
      DATE_FORMAT(NOW(), '%a'), -- 요일
      DATE_FORMAT(NOW(), '%w') -- 대문자 요일
      ;

       

      ⌨ 문자 > 날짜 STR_TO_DATE

      SELECT STR_TO_DATE('2024-4-23','%Y-%m-%d %H:%i:%S');
      SELECT STR_TO_DATE('2024-4-23','%Y-%m-%d');
      SELECT ADDDATE(STR_TO_DATE('2024-4-23','%Y-%m-%d'),10);

       

      ⌨ 년도 - 월 - 일 형식 만들기 CAST

      SELECT CAST('2024/4/23' AS DATE),CAST('2024$4$23' AS DATE);

       

      숫자 관련

      ⌨ 해당 형식으로 숫자 만들기

      SELECT CAST(1234.567 AS INTEGER)AS a,
      CAST(1234.567 AS CHAR(3))AS b;

      SELECT CONVERT(1234.567 , INTEGER);

       

      ⌨  반올림

      SELECT FORMAT(1234.567,2),FORMAT(1234.567,0);

       

      ✔ 기타 함수

      ⌨ rank() : 순위를 결정 _ 동점자 처리 O

      SELECT jikwon_no, jikwon_name,jikwon_pay FROM jikwon ORDER BY jikwon_pay desc;

      SELECT jikwon_no, jikwon_name,jikwon_pay,
      RANK() OVER (ORDER BY jikwon_pay ) AS RANK1
      FROM jikwon;

       

       

      ⌨ DENSE_RANK() : 순위를 결정 _ 동점자 처리 X

      SELECT jikwon_no, jikwon_name,jikwon_pay,
      DENSE_RANK() OVER (ORDER BY jikwon_pay ) AS RANK
      FROM jikwon;

       

      SELECT jikwon_no, jikwon_name,jikwon_pay,
      RANK() OVER (ORDER BY jikwon_pay ) AS RANK1,
      DENSE_RANK() OVER (ORDER BY jikwon_pay ) AS RANK2
      FROM jikwon;

       

       
       

      ⌨ nvl(value1, value2) : value1이 null이면 value2를 취함

      NULL값에 다른 값 넣

      SELECT jikwon_no, jikwon_name, jikwon_jik, nvl(jikwon_jik,'임시직')AS jik FROM jikwon;

      ⌨ nvl2(value1, value2, value3) : value1이 null인지 평가  후  null이면 value3, null이 아니면 value2

      SELECT jikwon_no, jikwon_name, jikwon_jik,
      nvl2(jikwon_jik,'정규직','임시직')AS jik
      FROM jikwon;

      ✔ 시스템 정보 함수

      CURRENT_USER(), DATABASE()

      SELECT CURRENT_USER(), DATABASE();

       

      CURRENT_USER() : 현재 클라이언트를 사용하는 계정의 사용자 이름과 후스트 이름을 반환

      DATABASE() : 현재 데이터베이스의 이름을 반환한다.

      데이터베이스가 없으면 NULL 또는 ""를 반환한다.

        FOUND_ROWS()

      SELECT * FROM 테이블명;
      SELECT FOUND_ROWS();

      직전의 실행한 행의 수를 리턴한다. 

       

      ROW_COUNT()

      UPDATE 테이블명 SET 열 = 변경할값 ;
      SELECT ROW_COUNT();

      직전에 실행한 INSERT, UPDATE, DELETE 쿼리를 통해 수행된 row 수를 알려줌

      SELECT 후 사용하면 '-1'을 리턴한다.

      ✔ 제어 흐름 함수

       IF(조건, 참, 거짓)

      SELECT IF (100>200,'참이다','거짓이다');

       

       IFNULL(value1, value2)

      SELECT IFNULL(NULL,'널')

      value1이 NULL이 아니면 value1 리턴, NULL이면 수식2 리턴

       

       NULLIF(value1, value2) : 두 개의 값이 일치하면 null을, 아니면 value1을 취함

      SELECT NULLIF(length('asdf'), LENGTH('kbs'));
      SELECT NULLIF(length('abc'), LENGTH('kbs'));

      직급이 대리인 경우 null 출력하기

      SELECT jikwon_name, jikwon_jik,NULLIF(jikwon_jik, '대리')FROM jikwon;

       

      ⌨ 조건 표현식 (conditional expression) : case - when - than

      1번 방법

      SELECT 
      	case 10/5
      	when 5 then '안녕'
      	when 2 then '반가워'
      	ELSE '기타'
      	END AS 결과
      FROM DUAL;

      2번 방법

      SELECT jikwon_name,
      case
      when jikwon_gen='남' then 'M'
      when jikwon_gen='여' then 'F'
      END AS jender
      FROM jikwon;

       


      😊정리

       
      문제에 따라 잘 사용하는게 중요하다.
      DB벤더사마다 내장 쿼리가 조금씩 차이가 있다.
      ORACLE 내장 객체와 문법이 다를 수 있는 점을 유의하자!

       

      MYSQL에는 많은 내장 기능이 있다. 아래 다양한 함수들이 설명되어 있다.(한국어 지정 가능)

      https://ko.w3hmong.com/mysql/mysql_ref_functions.htm

       

      MySQL 함수

      MySQL 함수 MySQL에는 많은 내장 기능이 있습니다. 이 참조에는 문자열, 숫자, 날짜 및 MySQL의 일부 고급 기능이 포함되어 있습니다. MySQL 문자열 함수 Function Description ASCII Returns the ASCII value for the spec

      ko.w3hmong.com

       

    Designed by Tistory.