[Node.js_6기 사전캠프] Today I Learned_0704

2024. 7. 4. 16:20[Node.js_6기 사전캠프]

DATETIME에서 DATE로 형 변환

https://school.programmers.co.kr/learn/courses/30/lessons/59414

 

우선, 추출해야 하는 컬럼을 지정하고 조회할 때 보여지는 순서와 컬럼명까지 코드를 작성하는 것은 쉬웠다.

SELECT ANIMAL_ID, NAME, DATETIME as '날짜' from ANIMAL_INS
order by ANIMAL_ID asc;

 

그러나 DATETIME의 데이터가 '2014-08-08 04:20:00' 의 형식으로 되어 있어, 날짜만 보이도록 새로운 코드를 추가해야만 했다. DATE 함수와 DATE_FORMAT 함수를 찾았으나, DATE 함수는 하기와 같이 시간이 이상하게 표기되어 포기했다.

SELECT t1.ANIMAL_ID, t1.NAME, DATE(t1.DATETIME) as '날짜' from ANIMAL_INS t1
order by t1.ANIMAL_ID asc;

 

원하는 형식으로 추출할 수 있다는 DATE_FORMAT 함수를 사용해보니, 드디어 시간이 사라졌다. 그러나 4자리 숫자로 연도를 표시해야 하는데, 2자리를 표시하는 '%y'를 사용했다. 대소문자 구분에 따라 결과가 달라지니, 꼭 확인해야 한다.

SELECT t1.ANIMAL_ID, t1.NAME, date_format(t1.DATETIME, '%y-%m-%d') as '날짜' from ANIMAL_INS t1
order by t1.ANIMAL_ID asc;

 

드디어, 정답에 해당하는 코드가 완성되었다.

SELECT t1.ANIMAL_ID, t1.NAME, date_format(t1.DATETIME, '%Y-%m-%d') as '날짜' from ANIMAL_INS t1
order by t1.ANIMAL_ID asc;

 


◈ 오늘의 눈물 한 방울

DATE_FORMAT 함수를 알려준 블로그 글에서 't1'에 대한 설명이 없어서, 빼고 테스트 해보니 오류가 났다. 정확히 무슨 기능인지 모르겠지만, 일단 다 넣고 테스트 했을 때 이상이 없어서 정답을 제출한 뒤... 개발자 지인 찬스를 썼다. 아무리 검색해도 table 1 같은 임시 약어(?) 같은 기능으로 보이는데, 왜 빼면 오류가 나는 것인지 모르겠다고 질문했다. 결론은... t1은 본 문제에서 필요가 없었다. 오류가 났던 것은... 그냥 테스트 과정에서 뭔가 타이핑을 잘못했던 것 같다.

 

t1은 Table1의 약어로, 특정 테이블에서 컬럼 데이터를 가져올 때 쓰는 코드이다. 2개 이상의 테이블을 활용해야 할 때 주로 쓴다. 본 문제처럼 테이블이 하나일 경우, 굳이 쓸 필요가 없다. 사용 예시는 하기와 같다.

SELECT t.test_info_idt.test_info_namet.test_info_front,
u.user_info_idu.user_info_periodu.user_info_timeu.user_info_state
FROM tb_test_info 
LEFT JOIN tb_user_info 
ON t.test_info_id = u.test_info_id and u.user_info_date = ?
WHERE t.detail_info_id = ? and t.test_info_state != 4

 

너무 긴 각 테이블 명 뒤에 약어(별명? 별칭?)로 쓸 이름을 붙여주고, 각 테이블에서 가져올 칼럼 데이터는 '약어.칼럼명'로 불러온다.