2024.01.04(목)

🗓️SQL 날짜 연산

Date & Time Arithmetic Functions 🔗

SyntaxReturn
DATEDIFF(date1, date2)(date1 – date2) [days]
DATE_ADD(date, INTERVAL expr unit)expr에 “-”를 붙여 음수 덧셈도 가능 [unit]
DATE_SUB(date, INTERVAL expr unit)DATE_ADD와 동일 [unit]
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)(datetime_expr2 - datetime_expr1) [unit]

Date and Time Units 🔗

UnitDescription
MICROSECONDMicroseconds
SECONDSeconds
MINUTEMinutes
HOURHours
DAYDays
WEEKWeeks
MONTHMonths
QUARTERQuarters
YEARYears
SECOND_MICROSECONDSeconds.Microseconds
MINUTE_MICROSECONDMinutes.Seconds.Microseconds
MINUTE_SECONDMinutes.Seconds
HOUR_MICROSECONDHours.Minutes.Seconds.Microseconds
HOUR_SECONDHours.Minutes.Seconds
HOUR_MINUTEHours.Minutes
DAY_MICROSECONDDays Hours.Minutes.Seconds.Microseconds
DAY_SECONDDays Hours.Minutes.Seconds
DAY_MINUTEDays Hours.Minutes
DAY_HOURDays Hours
YEAR_MONTHYears-Months

활용 예시 (1달 이내에 출간된 신간 도서)

SELECT * FROM books WHERE DATEDIFF(DAY, published_date, NOW()) <= 30;
SELECT * FROM books WHERE DATEDIFF(NOW(), published_date) <= 30;
SELECT * FROM books WHERE DATE_ADD(published_date, INTERVAL 1 MONTH) >= NOW();
SELECT * FROM books WHERE DATE_SUB(NOW(), INTERVAL 1 MONTH) <= published_date;
SELECT * FROM books WHERE published_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();

📄Pagination (Paging) 구현

MariaDB LIMIT 🔗

  • Syntax
    • LIMIT offset, row_count
    • LIMIT row_count OFFSET offset
  • Pagination Arithmetic

    offset=limit×(page1)\text{offset} = \text{limit} \times (\text{page} - 1)

    변수의미
    limitpage 당 row 수
    pagepage 번호
    offset시작할 row index (0부터 시작)

📈성능 개선하기

offset과 limit은 offset+limit만큼 data를 불러온 후 그 결과에서 limit만큼만 보여주도록 되어 있어 data의 양이 많아지면 비효율적이게 된다.

👉 DB 페이지네이션을 최적화하는 여러 방법들에 정리가 잘 되어 있다.

오늘 팀 멘토링 때 branch를 따로 파서 PR을 만들어 피어 리뷰를 해보라는 조언을 받았다. 그 동안 바로 main branch에 push를 했었는데 확실히 PR을 만들면 조원들끼리 서로 리뷰하기도 좋을 것 같다. 오늘 그래서 수업 내용에 개인적으로 추가하고 싶었던 기능을 새로운 branch를 파서 구현하고 main에 PR해보았다!

profile
이것저것 관심 많은 개발자👩‍💻

0개의 댓글