MultipartFile로 받아 처리@PostMapping("/uploads")
public ResponseEntity<?> uploadSingleFile(@RequestParam("profile") MultipartFile originFile) {
String fileName = UUID.randomUUID().toString() + 확장자;
originFile.transferTo(저장경로);
return ResponseEntity.ok("OK!!");
}
@PostMapping("/uploads-multi")
public ResponseEntity<?> uploadMultipleFile(@RequestParam("profiles") List<MultipartFile> originFiles) {
for (MultipartFile file : originFiles) {
file.transferTo(저장경로);
}
return ResponseEntity.ok("OK!!");
}
WebMvcConfigurer의 addResourceHandlers()를 오버라이드하여 외부 경로의 파일에 접근 허용registry.addResourceHandler("/uploads/**")
.addResourceLocations("file:" + fileUploadConfig.getLocation());
| 함수 | 설명 |
|---|---|
UPPER(column) | 대문자로 변환 |
LOWER(column) | 소문자로 변환 |
INITCAP(column) | 각 단어 첫 글자 대문자 |
LENGTH(column) | 문자열 길이 |
INSTR(column, '문자') | 특정 문자의 위치 |
SUBSTR(column, 시작, 길이) | 문자열 추출 |
CONCAT(a, b) | 문자열 연결 |
REPLACE(column, '기존', '변경') | 문자열 변경 |
LPAD(column, 길이, '문자') | 왼쪽 채움 |
RPAD(column, 길이, '문자') | 오른쪽 채움 |
| 함수 | 설명 |
|---|---|
ROUND(숫자) | 반올림 |
TRUNC(숫자) | 버림 |
CEIL(숫자) | 올림 |
FLOOR(숫자) | 내림 |
MOD(a, b) | 나머지 (짝/홀수 구분 가능) |
| 함수 | 설명 |
|---|---|
SYSDATE | 현재 시스템 시간 |
TO_CHAR(date, '형식') | 날짜를 문자열로 변환 |
TO_DATE('문자열', '형식') | 문자열을 날짜로 변환 |
TO_CHAR(registration_date, 'YYYY-MM-DD')| 함수 | 설명 |
|---|---|
NVL(a, b) | a가 NULL이면 b 반환 |
NVL2(a, b, c) | a가 NULL이 아니면 b, NULL이면 c 반환 |
NULLIF(a, b) | a와 b가 같으면 NULL 반환, 다르면 a 반환 |
COALESCE(a, b, c...) | 가장 먼저 NULL이 아닌 값 반환 |
CASE
WHEN 조건 THEN 결과
WHEN 조건 THEN 결과
ELSE 기본값
END
CASE
WHEN 등록년도 >= 2023 THEN '새싹 유저'
WHEN 등록년도 >= 2021 THEN '기존 유저'
ELSE '고인물 유저'
END
TO_CHAR로 날짜 포맷 바꾸기
'2023년 01월 01일 (일요일)' 형태로 변환
NVL로 NULL 대체
manager_id가 NULL이면 '최상위 관리자' 출력
CASE로 활동 상태 구분
최근 로그인 날짜 기준으로 '최근 활동 유저' 또는 '휴면 유저'
MOD + CASE로 댓글 구분
짝수 comment_id -> '짝수 댓글', 홀수 -> '홀수 댓글'