DATE - timestamp
2019. 1. 31. 09:18
총 정리
# TO_CHAR() : timestamp -> 문자열 or 영어로표현된 문자열로
- 현재시간 : MSSQL : GETDATE() / PostgreSQL : NOW()
- 날짜-> 문자열로 변환 : MSSQL : CONVERT( datatype, 시간(시간칼럼), date type number) / PostgreSQL : TO_CHAR( 시간(시간칼럼) , 'date type' )
- TO_CHAR( , )에 들어가는 datetype에서, YYYY=yyyy, MM=mm, DD=dd, HH=hh 대소문자 구분안하고 년/월/일/시이다.
- 분(minute)는 MI = mi
--위는 TIMESTAMP 형식 : [ YYYY-MM-DD HH:MI:SS ]
--아래에서는 MM과 DD 대신 --> [ 요일(FMDAy) - 일의 th형식 + 월의 영어표현(FMMonth) ] -----
[ FMDay FMDDth FMMonth, YYYY HH:MI:SS] - 요일은 Day = day = DAY 가 있다. 그러나 공백을 제거하기 위해서는 FM을 붙힌 FMDay = FMDAY = FMday
- 일의 th 표현은 DDth = ddth이다.
- 월의 영어표현은 FMMonth = FMMONTH = FMmonth 이다.
# TO_TIMESTAMP() : 문자열 -> timestamp 로
- TO_TIMESTAMP( '문자열로 표현된 시간' , ' 그 문자열의 DATE TYPE 형식' )을 넣어주면, timestamp로 변환
TIMESTAMP
-- DATE -- date는 많은 문제가 있다. -- 1) datetime의 형태가 너무 많다. ex> 2019-01-30 or 01-30-2019 or 01. 30. 2019 -- 2) timezone개념이 붙어있다. ex> GMT, RUSSIAN, UTC 등등 장소에 따라 current time이 달라진다. -- >> 추천하는 방법 : SQL에는 TIMEZONE을 입력하지 않고, python 등 어플리케이션 단에서 TIMEZONE을 적용한다. -- PostgreSQL의 메인 date 타입 4가지 : timestamp, date, time, interval -- 1) timestamp -- ISO 8601 standard date 타입 in DB. YYYY-MM-DD HH:mm:ss -- pgSQL의 default 형식으로 많은 문제를 예방할 수 있음. SELECT timestamp '2019-01-30 13:30:45'; -- 2) timestamp to string -- (1) NOW()로 현재시간을 가져온다 <--> MSSQL의 GETDATE() or DATEDIFF( 간격, datetime, GETDATE()) -- (2) TO_CHAR( timestamp, 'DD' 등 날짜포맷 ); 으로 문자열로 전환 <--> MSSQL의 CONVERT( type, datetime, style) SELECT NOW(); --MSSQL에서는 GETDATE() 였다! SELECT TO_CHAR( NOW(),'DD' ); -- MSSQL의 CONVERT( type, datetime, style) or DATEDIFF( 간격, datetime, GETDATE()) SELECT TO_CHAR( NOW(),'dd' ); -- text 30 SELECT TO_CHAR( NOW(),'MM' ); SELECT TO_CHAR( NOW(),'mm' ); -- text 01 SELECT TO_CHAR( NOW(),'YYYY' ); SELECT TO_CHAR( NOW(),'yyyy' ); -- text 2019 SELECT TO_CHAR( NOW(), 'DD-MM-YYYY') -- text 30-01-2019 SELECT TO_CHAR( NOW(), 'DD-MM-YY') -- text 30-01-19 ==> confusing SELECT TO_CHAR( NOW(), 'DD-MM-YYYY HH') -- text 30-01-2019 02 SELECT TO_CHAR( NOW(), 'DD-MM-YYYY HH:MI'); -- pgSQL에서는 MM,mm month / MI :minute -- text 30-01-2019 02:28 SELECT TO_CHAR( NOW(), 'DD-MM-YYYY HH:MI:SS'); -- text 30-01-2019 02:28:08 SELECT TO_CHAR( NOW(), 'Day, DD-MM-YYYY HH:MI:SS'); -- text Wednesday, 30-01-2019 02:28:08 -- 만약 토요일이면, Saturday , 형식으로 빈칸이 하나 발생한다 그걸 제고 하고 싶다면 Day앞에 FM을 쓴다. SELECT TO_CHAR( NOW(), 'FMDay, DD-MM-YYYY HH:MI:SS'); -- text Wednesday, 30-01-2019 02:28:08 SELECT TO_CHAR( NOW(), 'FMDay Month, DD-MM-YYYY HH:MI:SS'); -- text Wednesday January , 30-01-2019 02:28:08 SELECT TO_CHAR( NOW(), 'FMDay FMMonth, DD-MM-YYYY HH:MI:SS'); -- text Wednesday January, 30-01-2019 02:28:08 --날짜를 3th 4th 형식으로도 줄 수 있다. SELECT TO_CHAR( NOW(), 'FMDay DDth FMMonth, DD-MM-YYYY HH:MI:SS'); -- text Wednesday 30th January , 30-01-2019 02:28:08 -- 이제 DD-MM 을 제거해서 보자. SELECT TO_CHAR( NOW(), 'FMDay DDth FMMonth, YYYY HH:MI:SS'); -- text Wednesday 30th January, 2019 02:28:08 -- 3) 이제 TO_TIMESTAMP( '마지막에 작성한 양식의 string' , 'string과 똑같은 양식의 날짜포맷' ); -- 를 통해 sting을 timestamp로 바꿀 수 있다. SELECT TO_TIMESTAMP('Wednesday 30th January, 2019 02:28:08', 'FMDay DDth FMMonth, YYYY HH:MI:SS'); -- 4) string양식이 ISO8601 이었으면, 그 string에 맞게 양식을 적어주면, timestamp로 변한다 SELECT TO_TIMESTAMP('2019-01-30 02:28:08', 'YYYY-DD-MM HH:MI:SS');
'한의대 생활 > └ PostgreSQL' 카테고리의 다른 글
SERIAL*( autoincrement 실용적인 대체) (0) | 2019.01.31 |
---|---|
ENUM* (순서를 가진 문자열범주 - ordinal) and NESTED SELECT*(집계결과는 따로받아, 해당테이블 SELECT 칼럼연산 or WHERE조건으로 사용) (0) | 2019.01.31 |
HAVING* ( group by 결과물의 조건문 ) (0) | 2019.01.30 |
DROP * ( with CASCADE ) and VIEW* ( with LOCAL / CASECADE CHECK OPTION ) (0) | 2019.01.30 |
SEQUENCE* ( autoincrement대체 ) and INDEX* ( WHERE서치를 문자열에서 빠르게 내부binary파일생성) (0) | 2019.01.30 |