Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 자바스크립트 API
- 보안뉴스 한줄요약
- 카카오프로젝트100
- 다크웹
- 자바스크립트 element api
- 파이썬
- GIT
- javascript
- 랜섬웨어
- 보안뉴스요약
- 자바스크립트
- 자바스크립트 node
- 자바스크립트 기본 문법
- ES6
- 카카오프로젝트
- 카카오프로젝트 100
- 자바스크립트 prototype
- php
- oracle
- 깃허브
- 보안뉴스
- 오라클
- numpy
- 자바스크립트 객체
- python
- 자바스크립트 jQuery
- oracle db
- Oracle SQL
- 보안뉴스 요약
- 보안뉴스한줄요약
Archives
- Today
- Total
FU11M00N
createAt 데이터 가공 db에서 처리하기 본문
포스트 기능 개발 중 프런트에게
id, title, content, hit, createdAt, writer. 데이터를 보내줘야 하는 일이 생겼다.
이 중 createdAt 데이터를 보낼 땐 포스트의 생 성일이 오늘 날짜라면 시간 : 분 (12:30) 데이터를 보내야 하고,
생성일이 오늘이 아니라면 년-월-일 (2023-04-09) 데이터를 보내야 한다.
해당 작업을 메모리에서 작업(node.js 에서 처리) 하려던 찰나 포스트 데이터가 많아질수록 메모리 자원이 많이 사용될 것 같은 느낌이 들어
db에서 한꺼번에 작업하려고 노선을 변경했다.
쿼리문으론, 아래와 같이 case 문을 사용하여 처리가 가능하다.
select
case substring(NOW(),'6','6')
when substring(createdAt,'6','6')
then substring(createdAt, '12', '5')
else substring(createdAt, '1', '10')
END as 'createdAt'
from posts;
시퀄라이즈는 아래와 같이 Sequelize 객체의 literal를 사용하여 쿼리문을 사용한다.
attributes: [
'id',
'title',
'hit',
'UserId',
[
Sequelize.literal(
` CASE substring(NOW(), '6', '6') WHEN substring(Post.createdAt, '6','6') THEN substring(Post.createdAt, '12', '5') else substring(Post.createdAt, '1', '10') END`,
),
'createdAt',
],
],
주의) 시퀄라이즈의 표준 시간이 "UTC"로 되어있기에 "+09:00"을 하여 한국시간으로 맞추는 설정을 한다.
const sequelize = new Sequelize(config.database, config.username, config.password, {
host: config.host,
dialect: config.dialect,
timezone: '+09:00',
dialectOptions: {
charset: 'utf8mb4',
dateStrings: true,
typeCast: true,
},
define: {
timestamps: true,
},
});
Comments