본문으로 바로가기

[프로그래머스] Oracle : String, Date

category 알고리즘/SQL 2022. 1. 13. 15:43
728x90

 

루시와 엘라 찾기

 

- 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하기 위해 select 이후의 행을 입력한 후,

해당하는 NAME에 맞는 결과를 WHERE문을 통해 조회하였다.

아이디 순으로 조회하므로 ORDER BY 1(첫번째 행);  (오름차순은 생략가능)을 통해 조회한다.

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE FROM ANIMAL_INS
WHERE NAME='Lucy' OR NAME='Ella' OR NAME='Pickle' OR NAME='Rogan' OR NAME='Sabrina' OR NAME='Mitty'
ORDER BY 1;

 

이름에 el이 들어가는 동물 찾기

 

- 이름에 "EL"이 들어가는 개를 찾는 문제이므로 LIKE '%EL%' (%는 공백 또는 문자가 포함될 수 있다는 뜻)

를 사용하고 동물의 타입을 Dog로 설정한다.

위와 같이 조회시 소문자인 "el"과 같은 문자열은 포함시키지 않게 되므로

대소문자를 구분하지 않기 위해서 이름을 UPPER()를 통해 대문자로 통일시키는 과정이 필요하다. 

 

SELECT ANIMAL_ID,NAME FROM ANIMAL_INS WHERE UPPER(NAME) LIKE '%EL%' AND ANIMAL_TYPE='Dog'
ORDER BY 2;

 

중성화 여부 파악하기

 

- 특정 컬럼의 조건에 따라 'O', 'X'를 택해야 하므로 자바의 IF~ELSE문과 같은 식으로

CASE WHEN 조건식1 THEN 결과1

        WHEN 조건식2 THEN 결과2

        .....

        ELSE 나머지 결과 

        END

문을 통해 주어진 조건을 표현할 수 있다.

 

SELECT ANIMAL_ID, NAME,
CASE WHEN SEX_UPON_INTAKE='Neutered Male' THEN 'O'
     WHEN SEX_UPON_INTAKE='Spayed Female' THEN 'O'
     ELSE 'X' 
     END AS 중성화 
FROM ANIMAL_INS ORDER BY 1;

 

오랜 기간 보호한 동물(2)

 

- 처음에 O.DATETIME-I.DATETIME의 차이를 조회하여 DESC를 하는 방식으로 조회하다 여러 차례 삽질 후

다른 풀이를 참고하며 작성하였다.

ORDER BY를 통해 둘의 차이를 계산하여 정렬이 가능하다는 점을 알 수 있었고,

ROWNUM을 통해 쿼리의 개수 제한을 걸 수 있다는 점을 알았다.

 

SELECT ANIMAL_ID, NAME
FROM (SELECT O.ANIMAL_ID, O.NAME
      FROM ANIMAL_INS I, ANIMAL_OUTS O
      WHERE I.ANIMAL_ID=O.ANIMAL_ID ORDER BY O.DATETIME-I.DATETIME DESC)
WHERE ROWNUM<=2;

 

DATETIME에서 DATE로 형 변환

 

- 처음에 형 변환을 위해 TO_DATE()를 사용했었기에 이를 찾아본 결과

TO_DATE는 아래와 같은 포맷으로만 작동한다.

날짜 포맷(형식)의 예
문자 예시
YYYY/MM/DD
2022/01/14
YYYY-MM-DD
2022-01-14
DD-Mon-YYYY
14-11-2022

 

따라서 주어진 DATETIME의 형태인 2018-01-22 14:32:00와 다르기에 TO_CHAR()를 사용하여

형변환을 시키는 것이 맞다.

SELECT ANIMAL_ID, NAME, TO_CHAR(DATETIME,'YYYY-MM-DD') as 날짜
FROM ANIMAL_INS ORDER BY 1;

 

 

728x90