-
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
'SQL > sql 문법(mysql, mariaDB)' 카테고리의 다른 글
다중 행 서브쿼리 : ANY, ALL, EXISTS (+ subquery와 join) (0) 2024.05.09 subquery _ 상관쿼리( correlated subquery ) (0) 2024.05.08 2.JOIN _ inner, outer (+ on과 where의 차이) (0) 2024.05.06 1. JOIN _ CROSS JOIN, SELF JOIN, EQUI JOIN (0) 2024.05.04 그룹 함수 : GROUP BY 와 HAVING + 복수행 함수(집계함수) (0) 2024.05.03