inblog logo
|
jay0628
    Database

    [DB] 3. SELECT 단일행 함수

    김주희's avatar
    김주희
    Feb 26, 2025
    [DB] 3. SELECT 단일행 함수
    Contents
    1. 단일행 함수2. 날짜 포맷3. 조건문4. 정렬

    1. 단일행 함수

    -- SELECT 단일행 함수 -- 1. 날짜/시간 -- from dual 생략 select now(); select ename, hiredate, now() from emp; -- varchar 문자열 타입 select '2025-02-25'; -- date 타입으로 변경 select date('2025-02-25 12:30:35'); -- time만 출력 select time('2025-02-25 12:30:35'); select year('2025-02-25 12:30:35'); select month('2025-02-25 12:30:35'); select day('2025-02-25 12:30:35'); select hour('2025-02-25 12:30:35'); select minute('2025-02-25 12:30:35'); select second('2025-02-25 12:30:35'); -- 2. 날짜 포맷 -- Y(키워드)는 대문자 m, d는 소문자 (Minute도 있어서 month는 소문자로 씀) select date_format(now(), '%Y/%m/%d-%h:%i:%s'); -- 3. 날짜 연산하기 (더하기, 빼기, 간격, 마지막 날짜) select date_add(now(), interval 4 year); select date_add(now(), interval 4 MONTH); select date_add(now(), interval 4 WEEK); select date_add(now(), interval 4 day); select date_add(now(), interval 4 hour); select date_add(now(), interval 4 minute); select date_add(now(), interval 4 second); select date_sub('2025-02-25', interval 4 day); select datediff('2025-02-25','2025-03-01'); select timediff(now(), '2025-02-25 12:50:00'); select last_day(now()); -- 4. 수학 함수 (ABS, CEIL, FLOOR, ROUND, RAND, mod 등...) select floor(101.5); select ceil(101.5); select round(101.5); select mod(101,10); -- 5. 문자열 함수 -- substr(문자열,시작번지1~,길이) select substr(hiredate, 1, 4) from emp; select year(hiredate) from emp; -- replace(문자열, 기존의 바꾸고자 하는 문자열, 치환하고자 하는 문자열) select replace("010/2222/7777", "/", "-"); -- instr: 문자열에서 찾는 문자열이 있으면 시작 번지, 없으면 0 select instr("abcde", "c"); -- rpad(원본문자열 , 원하는 자리수, 채울 문자열): 오른쪽에 특정문자를 원하는 자리수만큼 채워서 반환 select rpad('ssarmango',10, '*'); select rpad(substr('ssarmango',1,4), LENGTH('ssarmango'), '*'); -- lpad select lpad(substr('ssarmango',1,4), LENGTH("ssarmango"), '*');
     
     

    6. 문제 풀기

    -- 6. 문제 풀기 select name, replace(tel,'381','***') from student; -- (1). )와 -위치 찾기 select name, tel, instr(tel,")"), instr(tel,"-") from student; -- (2). )와 - 사이 문자열 추출 select name, tel, substr(tel, instr(tel,")") + 1 , instr(tel,"-")-instr(tel,")") - 1 ) as '치환할 부분' from student; -- (3). 기존 문자열 -> *** select name, tel, replace(tel, substr(tel, instr(tel,")") + 1 , instr(tel,"-")-instr(tel,")") - 1 ),repeat("*", instr(tel,"-")-instr(tel,")") - 1 )) as 'telephone' from student;
    notion image
     

    2. 날짜 포맷

    형식
    설명
    예시 (2025-02-25 14:30:45)
    %Y
    4자리 연도
    2025
    %y
    2자리 연도
    25
    %m
    2자리 월(01~12)
    02
    %c
    월 별 이름을 0 ~12 로
    2
    %d
    2자리 일(01~31)
    25
    %e
    일(1, 19)
    25
    %H
    24시간제 시간(00~23)
    14
    %h or %I
    12시간제 시간(01~12)
    02
    %i
    분(00~59)
    30
    %s or %S
    초(00~59)
    45
    %p
    AM/PM
    PM
    %M
    월 이름 (January~December)
    February
    %b or %h
    월 이름 약어 (Jan~Dec)
    Feb
    %W
    요일 이름 (Sunday~Saturday)
    Tuesday
    %a
    요일 약어 (Sun~Sat)
    Tue
    %w
    요일 숫자 (0=일요일, 6=토요일)
    2
    %j
    연도 기준 몇 번째 날(001~366)
    056
    %U
    연 기준 주(일요일 시작, 00~53)
    08
    %u
    연 기준 주(월요일 시작, 00~53)
    08
     
     

    3. 조건문

    -- 조건문(if - mysql, case when - 모든 DB) select if(10>5, "참", "거짓");
    notion image
     
    -- 2500 (고액연봉), (일반연봉) select ename, sal, case when sal > 2500 then "고액연봉" when sal < 2000 then "일반연봉" else "중간연봉" end "연봉그룹" from emp;
    notion image
     

    4. 정렬

    select * from emp where deptno = 20 order by sal asc;
    notion image
     
    ❗
    order by 칼럼1, 칼럼2
    : 칼럼1 기준으로 정렬 후 동일한 값을 가지는 인스턴스에 대해서 다시 칼럼2 기준으로 정렬
    -- 같은 sal 중에서는 이름 순서로 두 번 정렬 select * from emp where deptno = 20 order by sal desc, ename asc;
    notion image
     
    -- 같은 이름이 없으므로 그냥 이름 순서로 정렬된 것과 같다. select * from emp where deptno = 20 order by ename asc, sal desc;
    notion image
     

    전체 코드

    -- SELECT 단일행 함수 -- 1. 날짜/시간 -- from dual 생략 select now(); select ename, hiredate, now() from emp; -- varchar 문자열 타입 select '2025-02-25'; -- date 타입으로 변경 select date('2025-02-25 12:30:35'); -- time만 출력 select time('2025-02-25 12:30:35'); select year('2025-02-25 12:30:35'); select month('2025-02-25 12:30:35'); select day('2025-02-25 12:30:35'); select hour('2025-02-25 12:30:35'); select minute('2025-02-25 12:30:35'); select second('2025-02-25 12:30:35'); -- 2. 날짜 포맷 -- Y(키워드)는 대문자 m, d는 소문자 (Minute도 있어서 month는 소문자로 씀) select date_format(now(), '%Y/%m/%d-%h:%i:%s'); -- 3. 날짜 연산하기 (더하기, 빼기, 간격, 마지막 날짜) select date_add(now(), interval 4 year); select date_add(now(), interval 4 MONTH); select date_add(now(), interval 4 WEEK); select date_add(now(), interval 4 day); select date_add(now(), interval 4 hour); select date_add(now(), interval 4 minute); select date_add(now(), interval 4 second); select date_sub('2025-02-25', interval 4 day); select datediff('2025-02-25','2025-03-01'); select timediff(now(), '2025-02-25 12:50:00'); select last_day(now()); -- 4. 수학 함수 (ABS, CEIL, FLOOR, ROUND, RAND, mod 등...) select floor(101.5); select ceil(101.5); select round(101.5); select mod(101,10); -- 5. 문자열 함수 -- substr(문자열,시작번지1~,길이) select substr(hiredate, 1, 4) from emp; select year(hiredate) from emp; -- replace(문자열, 기존의 바꾸고자 하는 문자열, 치환하고자 하는 문자열) select replace("010/2222/7777", "/", "-"); -- instr: 문자열에서 찾는 문자열이 있으면 시작 번지, 없으면 0 select instr("abcde", "c"); -- rpad(원본문자열 , 원하는 자리수, 채울 문자열): 오른쪽에 특정문자를 원하는 자리수만큼 채워서 반환 select rpad('ssarmango',10, '*'); select rpad(substr('ssarmango',1,4), LENGTH('ssarmango'), '*'); -- lpad select lpad(substr('ssarmango',1,4), LENGTH("ssarmango"), '*'); -- 6. 문제 풀기 select name, replace(tel,'381','***') from student; -- (1). )와 -위치 찾기 select name, tel, instr(tel,")"), instr(tel,"-") from student; -- (2). )와 - 사이 문자열 추출 select name, tel, substr(tel, instr(tel,")") + 1 , instr(tel,"-")-instr(tel,")") - 1 ) as '치환할 부분' from student; -- (3). 기존 문자열 -> *** select name, tel, replace(tel, substr(tel, instr(tel,")") + 1 , instr(tel,"-")-instr(tel,")") - 1 ),repeat("*", instr(tel,"-")-instr(tel,")") - 1 )) as 'telephone' from student; -- 조건문(if - mysql, case when - 모든 DB) select if(10>5, "참", "거짓"); -- 2500 (고액연봉), (일반연봉) select ename, sal, case when sal > 2500 then "고액연봉" when sal < 2000 then "일반연봉" else "중간연봉" end "연봉그룹" from emp;
    Share article

    jay0628

    RSS·Powered by Inblog