CodingTest Practice/Programmers

프로그래머스 : String, Date (SQL, ORACLE)

몽땅마니아(MDD) 2022. 6. 6. 20:21

https://programmers.co.kr/learn/courses/30/lessons/59046?language=oracle 

 

코딩테스트 연습 - 루시와 엘라 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

IN ( ) 을 이용해 NAME의 값이 괄호 안에 있는 값과 같으면 조회 

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID;

https://programmers.co.kr/learn/courses/30/lessons/59047

 

코딩테스트 연습 - 이름에 el이 들어가는 동물 찾기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

오라클에서는 대소문자를 구분하기 때문에 대소문자를 구분하지 않으면 정확한 값이 검색되지 않는다.

그러므로 나올 수 있는 경우의 수를 모두 넣어 조건을 달거나 LOWER를 써서 소문자로 바꾼 후 비교해준다.

-- 대소문자를 구분하므로 el이 들어가는 경우와 El로 시작하는 경우를 하나도 묶어 비교
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE (NAME LIKE '%el%' OR NAME LIKE '%El%')  AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;

-- LOWER함수를 사용해 비교할 NAME을 모두 소문자로 바꾼 후 비교
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE LOWER(NAME) LIKE '%el%' AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;

https://programmers.co.kr/learn/courses/30/lessons/59409?language=oracle 

 

코딩테스트 연습 - 중성화 여부 파악하기

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

DECODE 말고 어떻게 쓰나 생각했는데 알고보니 CASE문도 있었다.... 진짜 다 까먹었다 미쳤다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ;;

참고 블로그 : https://ljg960730.tistory.com/52

 

[프로그래머스/Oracle]중성화 여부 파악하기

https://programmers.co.kr/learn/courses/30/lessons/59409 코딩테스트 연습 - 중성화 여부 파악하기 ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다..

ljg960730.tistory.com

-- 두 성별에 대해서만 O 처리하고 나머지는 X 처리
SELECT ANIMAL_ID, NAME, DECODE(SEX_UPON_INTAKE, 'Neutered Male', 'O', 'Spayed Female', 'O', 'X') AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

-- CASE문(CASE WHEN THEN ELSE END) 사용해 조견별로 처리
SELECT ANIMAL_ID, NAME, 
CASE 
WHEN SEX_UPON_INTAKE LIKE 'Neutered%' THEN 'O'
WHEN SEX_UPON_INTAKE LIKE 'Spayed%' THEN 'O'
ELSE 'X'
END
AS 중성화
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;

https://programmers.co.kr/learn/courses/30/lessons/59411?language=oracle 

 

코딩테스트 연습 - 오랜 기간 보호한 동물(2)

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

DATETIME도 연산이 가능하므로 연산한 결과를 내림차순으로 정렬해 인라인 뷰로 두고 ROWNUM을 이용해 2줄만 가져온다.

SELECT ANIMAL_ID, NAME
FROM 
(
    SELECT OUTS.ANIMAL_ID AS ANIMAL_ID, OUTS.NAME AS NAME
    FROM ANIMAL_OUTS OUTS
    LEFT JOIN ANIMAL_INS INS
    ON OUTS.ANIMAL_ID = INS.ANIMAL_ID
    WHERE INS.ANIMAL_ID IS NOT NULL
    ORDER BY OUTS.DATETIME-INS.DATETIME DESC
)
WHERE ROWNUM <=2;

https://programmers.co.kr/learn/courses/30/lessons/59414?language=oracle 

 

코딩테스트 연습 - DATETIME에서 DATE로 형 변환

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

TO_CHAR를 이용해 날짜 포맷을 바꾼다.

참고 블로그 : https://coding-factory.tistory.com/439

 

[Oracle] 오라클 다양한 날짜 / 시간 포맷 변경 (TO_CHAR) 사용법 & 예제

쿼리문을 짜다보면 원하는 날짜와 시간의 형태를 뽑아내고 싶을 경우가 많습니다. 오라클에서 날짜 포맷의 변환은 TO_CHAR함수를 활용하여 변경하실 수 있습니다. 다양한 날짜 / 시간 포맷 SELECT --

coding-factory.tistory.com

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, TO_CHAR(DATETIME, 'YYYY-MM-DD') AS 날짜
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;