회사에서 MySQL(MariaDB), Oracle, MSSQL을 다 사용하다보니

 

MyBatis에서 like를 사용할때 처리하는 방법이

 

다 제각각이기에 정리를 해보았다.

 

[기본]

title like '%keyword%'


[MySQL]
title like CONCAT('%',#{keyword},'%')


[Oracle]
title like '%' ||  #{keyword} || '%'


[MSSQL]
title like '%' + #{keyword} + '%'

'DB' 카테고리의 다른 글

Supabase: 차세대 백엔드 서비스 솔루션 🚀  (3) 2025.06.04
[MyBatis] 동적쿼리 foreach문  (0) 2020.06.13
[DB] Join의 종류  (0) 2020.05.30
[My-SQL] 날짜관련 함수 모음  (0) 2020.05.30

예를들어, DB에 insert를 10개 한다하면 나는 serviceimpl에서 for문을 10번 돌려가면서

 

insert를 했었다. 그러다보니 코드도 지저분해지는 것이 보이고 하여 MyBatis foreach를 접하게되었다.

 

MyBatis foreach문 지원 태그

 

collection : 전달받은 인자. List or Array 형태만 가능

item : 전달받은 인자 값을 alias 명으로 대체

open : 구문이 시작될때 삽입할 문자열

close : 구문이 종료될때 삽입할 문자열

separator : 반복 되는 사이에 출력할 문자열

index : 반복되는 구문 번호이다. 0부터 순차적으로 증가

 

예시)

1. 배열을 Map에 넣어 데이터를 보낼경우(mapper.xml에서 Collection은 DAO 변수와 일치시켜줘야한다!)

//DAO
public List<Members> getDeptList(String[] memArray) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("memArray",memArray);
		return sqlSession.selectList("getDeptList", map);
}
<!-- mapper.xml -->
<select id="getDeptList"  resultType="members">
SELECT * FROM members m
JOIN dept d ON m.dept_name = d.dept_name
WHERE m.emp_seq IN
<foreach collection="memArray" item="arr" open="(" close=")" separator=",">
 #{arr}
</foreach>
ORDER BY m.emp_seq;
</select>

 

2. 배열을 직접 보낼경우(mapper.xml에서 Collection은 array로 작성해야한다!)

//DAO
public List<Members> getDeptList(String[] memArray) {
		return sqlSession.selectList("getDeptList", memArray);
}
<!-- mapper.xml -->
<select id="getDeptList"  resultType="members">
SELECT * FROM members m
JOIN dept d ON m.dept_name = d.dept_name
WHERE m.emp_seq IN
<foreach collection="array" item="arr" open="(" close=")" separator=",">
 #{arr}
</foreach>
ORDER BY m.emp_seq;
</select>

 

3. List를 Map에 넣어 데이터를 보낼경우(mapper.xml에서 Collection은 DAO 변수와 일치시켜줘야한다!)

//DAO
public List<Members> getDeptList(List<Members> empList) {
		HashMap<String, Object> map = new HashMap<String, Object>();
		map.put("empList",empList);
		return sqlSession.selectList("getDeptList", map);
}
<!-- mapper.xml -->
<select id="getDeptList"  resultType="members">
SELECT * FROM members m
JOIN dept d ON m.dept_name = d.dept_name
WHERE m.emp_seq IN
<foreach collection="empList" item="list" open="(" close=")" separator=",">
 #{list.emp_seq}
</foreach>
ORDER BY m.emp_seq;
</select>

 

4. 리스트를 직접 보낼경우(mapper.xml에서 Collection은 list로 작성해야한다!)

//DAO
public List<Members> getDeptList(List<Members> empList) {
		return sqlSession.selectList("getDeptList", empList);
}
<!-- mapper.xml -->
<select id="getDeptList"  resultType="members">
SELECT * FROM members m
JOIN dept d ON m.dept_name = d.dept_name
WHERE m.emp_seq IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
 #{item.emp_seq}
</foreach>
ORDER BY m.emp_seq;
</select>

'DB' 카테고리의 다른 글

Supabase: 차세대 백엔드 서비스 솔루션 🚀  (3) 2025.06.04
[MyBatis] RDBMS별 like 검색처리 방법  (0) 2020.06.13
[DB] Join의 종류  (0) 2020.05.30
[My-SQL] 날짜관련 함수 모음  (0) 2020.05.30

그냥 List를 쓰면 더 편하지만

 

가끔 배열을 사용해야할때가 있다. 이번에 프로젝트를 하면서 문자열을 ,로 split하여

 

갖고온 데이터를 배열에 넣어서 합쳐야할 상황이 있었다.

 

그래서 배열을 하나로 합치는 System.arraycopy를 포스팅합니다.

 

 //영업부서 지원부서번호 다 가져옴
ArrayList<Map<String, Object>> getDeptList = (ArrayList<Map<String, Object>>) workEvaluationDAO.getTargetDeptList(getDept);

String[] strArr = ((String) getDeptList.get(0).get("target_seq_array")).split(",");
String[] strArr2 = ((String) getDeptList.get(1).get("target_seq_array")).split(",");
String[] strAdd = new String[strArr.length+strArr2.length];

System.arraycopy(strArr, 0, strAdd, 0, strArr.length);
System.arraycopy(strArr2, 0, strAdd, strArr.length, strArr2.length);

String temp = "AND (";

for(int i=0; i<strAdd.length; i++) {
    if(i!=strAdd.length-1) {
        temp += " AA.dept_seq = "+strAdd[i] + " or ";
    }else {
        temp += " AA.dept_seq = "+strAdd[i];
    }
}

temp += ")";

 

두개의 상위부서에있는 하위 부서들의 번호를 다 가져오고 이를 하나의 배열로 만드는 작업이었다.

 

그리고 그 하위 부서들의 번호를 가지고 동적 쿼리에 적용했었다.(좋지 않은 방법이긴 하지만 떠오른는 방법이 없었다...)

 

System.arraycopy는 자바 배열의 갑승ㄹ 복사할 경우 사용한다.

 

형식 : arraycopy(Object arr, int arrStart, object resultArr, int resultStart, length)

 

파라미터 :

    arr = 복사하고자 하는 배열

    arrStart = arr의 복사를 어디서부터 할것인지

    resultArr = 복사한 배열을 넣을 배열

    resultStart = resultArr의 어디부터 넣을것인지

    length = 복사하고자 하는 배열의 요소 갯수

'Java' 카테고리의 다른 글

[Java] 페이지네이션 함수 만들기  (0) 2022.09.09
[Java]Lucy-xss-filter-servlet 적용하기  (0) 2022.08.02
[Java] ModelAndView와 String 리턴  (0) 2020.06.16

아무래도 회사에서 그룹웨어 쪽을 많이 하다보니

 

특정 날짜가 무슨 요일인지 구해야 하는 경우가 종종 있었다.

 

function getDayOfWeek(날짜문자열){ //ex) getDayOfWeek('2022-06-13')

    const week = ['일', '월', '화', '수', '목', '금', '토'];

    const dayOfWeek = week[new Date(날짜문자열).getDay()];

    return dayOfWeek;

}

 

getDayOfWeek() 메소드는 날짜 문자열을 Date 객체로 만들어서 Date 객체의 이 날짜가 무슨 요일인지 숫자 값으로 반환합니다.

 

getDay가 반환하는 요일 값의 범위는 일요일(0) 부터 토요일(6) 입니다.

 

이렇게 함수로 만들어놓으면 필요할때 바로바로 사용할 수 있습니다.

 

어려운 함수는 아니지만 자주쓰는것 같기에 포스팅 합니다.

'Javascript' 카테고리의 다른 글

[jQuery] jQuery 셀렉터 모음  (0) 2020.05.30

clean을 하니까 Tomcat 오류가 해결되었다.

 

먼저 tomcat server 우클릭하고 clean

 

그리고 이클립스 메뉴 project clean

 

마지막으로 tomcat server에서 해당 프로젝트 우클릭하고 clean module work directory

'트러블슈팅' 카테고리의 다른 글

[Eclipse] 프로젝트에 빨간색 엑스 표시가 뜰때  (0) 2020.06.16

1. jQuery에 의한 HTML 요소/노드의 선택/추출

  ㅇ jQuery() 또는 $() 함수에, CSS 선택자 형식으로 인수 전달하면, 이에 매칭하는 요소들을 리턴
     - HTML 문서 DOM 트리의 요소들에 대해,
     - () 안에 언급된 1 이상 매칭되는 요소들을 추출      


2. jQuery 선택자 사용법 : $('선택자')      ☞ CSS 선택자 참조

  ㅇ 기본 선택자 :  *, id, class, 태그 선택자
     -  $('*') : 모든 요소 선택
     -  $('#id명')
     -  $('.class명')
     -  $('태그명')

  ㅇ 조합 선택자 : 콤머(,) 및 샵(#)
     - OR 선택자   : $('#id명_1, #id명_2, #id명_3, ... ')
     - AND 선택자  : $('태그명#id명')   => 해당 태그명에 해당 id명이 동시에 부합되는 것

  ㅇ 계층 선택자
     - 직계 자식 선택자 (> 기호)  : $('부모태그명 > 자식태그명')
        . 부모 바로 밑 직계 자식 만 대상으로 함
     - 모든 하위 선택자 (빈 칸)   : $('#id명 태그명')
        . 부모 밑 모든 자손 요소들을 대상으로 함
     - 다음 인접 선택자 (+ 기호)  : $('왼쪽형제태그명 + 오른쪽형제태그명')
        . 동등 계층에서, 자신포함 바로 다음 인접 형제 요소 만을 선택
     - 다음 형제 선택자 (~ 기호)  : $('왼쪽형제태그명 ~ 오른쪽형제태그명') 
        . 동등 계층에서, 자신 포함 뒤의 모든 일치하는 형제 요소들을 모두 선택

  ㅇ 속성 선택자 (찾는 속도가 다소 느림)
     -  $('태그명[속성명]')                 : 속성 존재 여부로 만 요소 선택
     -  $('태그명[속성명="완전일치속성"]')  : 속성 값이 일치 여부
     -  $('태그명[속성명*="부분일치속성"]') : 속성 값에 주어진 문자열의 포함 여부로 요소 선택
     -  $('태그명[속성명~="일치속성"]')     : 속성 값에 주어진 문자열이 단어로써 포함
     -  $('태그명[속성명|="일치속성"]')     : 속성 값에 주어진 문자열 그대로 포함 여부
                                              또는, 하이픈(-) 붙은 접두어로써 포함
     -  $('태그명[속성명!="일치속성"]')     : 속성 값이 존재 안하거나, 주어진 문자열과 불일치
     -  $('태그명[속성명^="시작일치속성"]') : 속성 값에 주어진 문자열로 시작하는 요소 선택
     -  $('태그명[속성명$="끝일치속성"]')   : 속성 값에 주어진 문자열로 끝나는 요소 선택

  ㅇ 필터 선택자 (찾는 속도가 다소 느림) 
     - 콜론(:) 기호로 시작하는 문자열 형식  ☞ 아래 3.항 참조
 

3. jQuery 필터 선택자 사용법 : $('선택자:필터형식')

  ㅇ 특정 아이템은 제거하고 필요한 것 만 걸러내는 것 
     -  콤머(:) 뒤에 필터 이름을 적음

  ㅇ 위치 필터
     -  :even  => 짝수번째(짝수 인덱스를 갖는) 엘리먼트 만 선택 (주의: 인덱스가 0부터 시작)
        . 例) $('tr:even')
     -  :odd   => 홀수번째(홀수 인덱스를 갖는) 엘리먼트 만 선택
     *  특히, odd,even 필터는 CSS 선택자에는 없는 유용한 기능 임

     -  :nth-child(index/even/odd/equation) => n번째 자식 요소를 선택 
        . (이때, 자식 순서는 1부터 시작)

     -  :first => 첫번째 엘리먼트 만 선택
     -  :last  => 마지막 엘리먼트 만 선택

     -  :eq(i) => i번째 요소를 선택 (주의: 인덱스 i는 0부터 시작)
     -  :gt(i) => i번째 이후의 요소를 선택
     -  :lt(i) => i번째 이전의 요소를 선택

  ㅇ 선택 필터
     -  폼 요소 선택
        . 폼 요소 선택             => :input, :text, :radio, :checkbox, :submit, :button 등
        . 폼 요소 상태에 따른 선택 => :selected, :checked, :disabled, :enabled, :focus 등
        . 例) $('input[type="radio"]:checked), 
              $('input[type="password"], input[type="text"]:disabled')

     -  header 요소 선택      => :header

     -  비 선택               => :not(원치않는선택자)
     -  포함된 것 만을 선택   => :has(내부포함선택자)
     -  텍스트 포함 선택      => :contains('텍스트')

     -  숨겨진 것 만을 선택   => :hidden
     -  보이는 것 만을 선택   => :visible


4. jQuery 상세 선택

  ㅇ 현재 선택된 요소 집합에서 더 좁혀 탐색

  ㅇ 조건 필터링 메서드
     * CSS 선택자에 의해 선택된 요소 집합 중에서,
        . 필터링에 의해 세부적으로 선택

     - $().first()   : 선택된 요소들 중 1번째 요소를 선택
     - $().last()    : 선택된 요소들 중 마지막 요소를 선택

     - $().filter()  : 선택된 요소들 중 선택 조건에 맞는 요소를 선택
        . filter( selector )
        . filter( function )
           .. Type: Function( Integer index, Element element ) => Boolean
        . filter( elements )
        . filter( selection )

     - $().has()     : 선택된 요소의 후손들 중 선택 조건에 맞는 요소를 선택
     - $().not()     : 선택된 요소 집합에서 일치하지 않는 요소들 만을 선택
        . 例) $("a").not("[data-id='1']") : a 요소들 중 data-id가 1이 아닌 요소를 선택

     - $().eq(index) : 선택된 요소들 중 index+1번째 요소를 선택
     - $().slice(start[,end]) : start+1 ~ end번째 요소를 선택

  ㅇ 조건 탐색 메서드 
     * 이미 선택된 요소를 기점으로, 
        . 어느 방향으로도 부모,형제,자식 노드를 접근하며 새로운 요소를 탐색

     - $().find( [Selector] )    : 현재 선택된 요소 내부에서 선택

     - $().parents( [Selector] ) : 모든 상위 요소들을 반환
     - $().parent( [Selector] )  : 가장 근접한 상위 요소 1개 만 반환
     - $().closest( [Selector] ) : 가장 근접한 상위 요소 1개 만 반환
        . 단, 특정한 요소부터 지정 가능

     - $().children( [Selector] ) : 자식 노드들을 반환

     - $().siblings( [Selector] ) : 인접한 형제 노드들을 반환

     - $().prev( [Selector] )     : 직전 형제 노드 만을 반환
     - $().prevAll( [Selector] )  : 이전 모든 노드들을 반환

     - $().next( [Selector] )     : 직후 형제 노드 만을 반환
     - $().nextAll( [Selector] )  : 이후 모든 형제 노드들을 선택

     - $().add( [Selector] ) : 선택되어 넘어온 요소 집합에 현재 선택한 요소 집합과의 합집합
     - $().addBack( [Selector] ) : 선택되어 넘어온 요소 집합에 현재 선택한 요소 집합과
                                   그 이전에 제외되었던 요소 집합도 추가하여 합집합
     - $().end( [Selector] ) : 직전 단계에서 선택되었던 요소를 선택 

     * [Selector] : (option) CSS 선택자

 

출처 : www.ktword.co.kr

공부를 할때는 INNER JOIN만 주로 써왔는데

실제로 회사를 와보니 여러가지 JOIN을 쓸 일이 생각보다 많았다.

 

구글링을 하다보니 괜찮을 사진을 찾게되어 올린다.

이 사진 하나면 웬만한 JOIN은 문제없이 할 수 있을 것 같다.

 

LEFT OUTER JOIN(RIGHT는 반대)

두 테이블 중에서 오른쪽 테이블에 조인시킬 컬럼의 값이 없는 경우에 사용을 하게 됩니다. 왼쪽 테이블 (Table A)의 값은 모두 다 나오지만 오른쪽 테이블 (Table B)의 값은 매칭이 되는게 없으면 출력이 되지 않음.

말 그대로 왼쪽 테이블 정보는 무조건 다 나옴

왼쪽 테이블 정보는 무조건 다 나옴

 

FULL OUTER JOIN

FULL OUTER JOIN은 왼쪽  오른쪽 외부 조인 의 결과를 결합하고 조인 절의 양쪽에있는 테이블에서 모든 (일치하거나 일치하지 않는) 행을 반환함

내가 개발을 하면서 중요하다고 생각하는 함수에는 빨간색으로 표시해두었다.

 

dayofweek(date)

날짜를 한 주의 몇 번째 요일인지를 나타내는 숫자로 리턴한다.

(1 = 일요일, 2 = 월요일, ... 7 = 토요일)

mysql> select dayofweek('1998-02-03');

-> 3

 

weekday(date)

날짜를 한 주의 몇 번째 요일인지를 나타내는 숫자로 리턴한다. (0 = 월요일, 1=화요일 ... 6 = 일요일)

mysql> select weekday('1997-10-04 22:23:00');

-> 5

mysql> select weekday('1997-11-05');

-> 2

 

dayofmonth(date)

그 달의 몇 번째 날인지를 알려준다. 리턴 값은 1에서 31 사이이다.

mysql> select dayofmonth('1998-02-03');

-> 3

 

dayofyear(date)

한 해의 몇 번째 날인지를 알려준다. 리턴 값은 1에서 366 사이이다.

mysql> select dayofyear('1998-02-03');

-> 34

 

month(date)

해당 날짜가 몇 월인지 알려준다. 리턴 값은 1에서 12 사이이다.

mysql> select month('1998-02-03');

-> 2


dayname(date)

해당 날짜의 영어식 요일이름을 리턴한다.

mysql> select dayname("1998-02-05");

-> thursday


monthname(date)

해당 날짜의 영어식 월 이름을 리턴한다.

mysql> select monthname("1998-02-05");

-> february

 

quarter(date)

분기를 리턴한다 (1~ 4)

mysql> select quarter('98-04-01');

-> 2

 

week(date)

week(date,first)

인수가 하나일 때는 해달 날짜가 몇 번째 주일인지(0 ~ 52)를 리턴하고 2개일 때는 주어진 인수로 한 주의 시작일을 정해 줄 수 있다. 0이면 일요일을1이면 월요일을 한 주의 시작일로 계산해 몇 번째 주인가 알려준다.

mysql> select week('1998-02-20');

-> 7

mysql> select week('1998-02-20',0);

-> 7

mysql> select week('1998-02-20',1);

-> 8

 

year(date)

년도를 리턴한다.(1000 ~ 9999)

mysql> select year('98-02-03');

-> 1998


hour(time)

시간을 알려준다.(0 ~ 23)

mysql> select hour('10:05:03');

-> 10

 

minute(time)

분을 알려준다(0 ~ 59)

mysql> select minute('98-02-03 10:05:03');

-> 5


second(time)

초를 알려준다(0 ~ 59)

mysql> select second('10:05:03');

-> 3

 

period_add(p,n)

yymm 또는 yyyymm 형식으로 주어진 달에 n개월을 더한다. 리턴 값은 yyyymm의 형식이다.

mysql> select period_add(9801,2);

-> 199803


period_diff(p1,p2)

yymm 또는 yyyymm 형식으로 주어진 두 기간사이의 개월을 구한다

mysql> select period_diff(9802,199703);

-> 11

 

date_add(date,interval expr type)

date_sub(date,interval expr type)

adddate(date,interval expr type)

subdate(date,interval expr type)

위의 함수들은 날자 연산을 한다. 잘 만 사용하면 꽤나 편리한 함수 들이다. 모두 mysql 3.22 버전에서 새롭게 추가되었다. adddate() 과 subdate() 는 date_add() 와 date_sub()의 또 다른 이름이다.

인수로 사용되는 date 는 시작일을 나타내는 datetime 또는date 타입이다. expr 는 시작일에 가감하는 일수 또는 시간을 나타내는 표현식이다.

type 값의 의미
사용 예

second, seconds

minute, minutes

hour, hours
시간
day, days

month, months

year, years

minute_second, "minutes:seconds"
분:초
hour_minute, "hours:minutes"
시:분
day_hour, "days hours"
일 시
year_month, "years-months"
년 월
hour_second, "hours:minutes:seconds"
시 분
day_minute, "days hours:minutes"
일, 시, 분
day_second, "days hours:minutes:seconds"
일, 시, 분, 초

 

[예제]

mysql> select date_add("1997-12-31 23:59:59",interval 1 second);

-> 1998-01-01 00:00:00

mysql> select date_add("1997-12-31 23:59:59",interval 1 day);

-> 1998-01-01 23:59:59

mysql> select date_add("1997-12-31 23:59:59",interval "1:1" minute_second);

-> 1998-01-01 00:01:00

mysql> select date_sub("1998-01-01 00:00:00",interval "1 1:1:1" day_second);

-> 1997-12-30 22:58:59

mysql> select date_add("1998-01-01 00:00:00",interval "-1 10" day_hour);

-> 1997-12-30 14:00:00

mysql> select date_sub("1998-01-02", interval 31 day);

-> 1997-12-02

 

 

to_days(date)

주어진 날짜를 0000년부터의 일수로 바꾼다.

mysql> select to_days(950501);

-> 728779

mysql> select to_days('1997-10-07');

-> 729669

 

from_days(n)

주어진 일수 n로부터 날짜를 구한다

mysql> select from_days(729669);

-> '1997-10-07'

 

date_format(date,format)

format 의 정의에 따라 날자 혹은 시간을 출력한다. 매우 빈번히 쓰이는 함수 이다.

format 에 사용되는 문자는 다음과 같다.

 

%m
월이름 (january..december)

%w
요일명 (sunday..saturday)

%d
영어식 접미사를 붙인 일(1st, 2nd, 3rd, etc.)

%y
4자리 년도

%y
2자리 년도

%a
짧은 요일명(sun..sat)

%d
일(00..31)

%e
일(0..31)

%m
월(01..12)

%c
월(1..12)

%b
짧은 월이름 (jan..dec)

%j
한해의 몇 번째 요일인가 (001..366)

%h
24시 형식의 시간 (00..23)

%k
24시 형식의 시간 (0..23)

%h
12시 형식의 시간 (01..12)

%i
12시 형식의 시간 (01..12)

%l
시간 (1..12)

%i
분 (00..59)

%r
시분초12시 형식 (hh:mm:ss [ap]m)

%t
시분초 24시 형식 (hh:mm:ss)

%s
초 (00..59)

%s
초 (00..59)

%p
am 또는 pm 문자

%w
일주일의 몇 번째 요일인가(0=sunday..6=saturday)

%U
한해의 몇 번째 주인가(0..52). 일요일이 시작일

%u
한해의 몇 번째 주인가(0..52). 월요일이 시작일

%%
`%' 문자를 나타냄

 

위 표에 나와 있는 것들을 제외한 모든 문자는 그냥 그대로 출력된다.

 

mysql> select date_format('1997-10-04 22:23:00', '%w %m %y');

-> 'saturday october 1997'

mysql> select date_format('1997-10-04 22:23:00', '%h:%i:%s');

-> '22:23:00'

mysql> select date_format('1997-10-04 22:23:00',

'%d %y %a %d %m %b %j');

-> '4th 97 sat 04 10 oct 277'

mysql> select date_format('1997-10-04 22:23:00',

'%h %k %i %r %t %s %w');

-> '22 22 10 10:23:00 pm 22:23:00 00 6'


주의! : mysql 3.23 버전부터 % 기호가 각 형식문자 앞에 필요하게 되었다 그 이전 버전에서는 선택 사항이다.

 

 

time_format(time,format)

이 함수는 date_format()와 비슷한 역할을 하지만 단지 시,분,초 만을 나타낼 수 있다는 점이다.

 

curdate()

current_date()
오늘 날짜를 'yyyy-mm-dd' 또는 yyyymmdd 형식으로 리턴한다, 리턴 값은 이 함수가 문자열로 쓰이느냐 숫자로 쓰이느냐에 따라 달라진다.

mysql> select curdate();

-> '1997-12-15'

mysql> select curdate() + 0;

-> 19971215

 

curtime()

current_time()

'hh:mm:ss' 또는 hhmmss 형식으로 현재시간을 나타낸다. 리턴 값은 이 함수가 문자열로 쓰이느냐 숫자로 쓰이느냐에 따라 달라진다.

mysql> select curtime();

-> '23:50:26'

mysql> select curtime() + 0;

-> 235026

 

now()

sysdate()

current_timestamp()

오늘 날자와 현재 시간을 'yyyy-mm-dd hh:mm:ss' 또는 yyyymmddhhmmss 형식으로 리턴 한다, 역시 리턴 값은 이 함수가 문자열로 쓰이느냐 숫자로 쓰이느냐에 따라 달라진다. 실제 개발 시 사용자의 등록일시 등을 나타낼 때 유용하게 쓰이는 함수다. 뒷부분의 실전예제에서 보게 될 것이다.

mysql> select now();

-> '1997-12-15 23:50:26'

mysql> select now() + 0;

-> 19971215235026

 

unix_timestamp()

unix_timestamp(date)

인수가 없이 사용될 경우 현재 시간의 유닉스 타임스탬프를 리턴하고

만일 날짜형식의 date 가 인수로 주어진 경우에는 주어진 날짜의 유닉스 타임스탬프를 리턴한다 유닉스 타임스탬프 란 그리니치 표준시로 1970 년 1월 1일 00:00:00 이 후의 시간경과를 초단위로 나타낸 것이다.

mysql> select unix_timestamp();

-> 882226357

mysql> select unix_timestamp('1997-10-04 22:23:00');

-> 875996580


주의 : 만일 unix_timestamp함수가 timestamp 컬럼 에서 사용될 경우에는 주어진 시간이 타임스탬프로 바뀌지 않고 그대로 저장된다.

 

from_unixtime(unix_timestamp)

주어진 유닉스 타임스탬프 값으로부터 'yyyy-mm-dd hh:mm:ss' 또는 yyyymmddhhmmss 형식의 날짜를 리턴한다.

mysql> select from_unixtime(875996580);

-> '1997-10-04 22:23:00'

mysql> select from_unixtime(875996580) + 0;

-> 19971004222300

 

from_unixtime(unix_timestamp,format)

주어진 유닉스 타임스탬프 값을 주어진 날짜 형식에 맞게 바꿔서 보여준다. 여기서 사용되는 형식문자는 date_format() 함수에서 사용된 것과 같다.

아래 예에서 %x 는 형식문자가 아니므로 그냥 x 가 표시됨에 유의하기 바란다.

mysql> select from_unixtime(unix_timestamp(),

'%y %d %m %h:%i:%s %x');

-> '1997 23rd december 03:43:30 x'

 

sec_to_time(seconds)

주어진 초를 'hh:mm:ss' 또는 hhmmss 형식의 시간단위로 바꿔준다.

mysql> select sec_to_time(2378);

-> '00:39:38'

mysql> select sec_to_time(2378) + 0;

-> 3938

 

time_to_sec(time)

주어진 시간을 초 단위로 바꿔준다.

mysql> select time_to_sec('22:23:00');

-> 80580

mysql> select time_to_sec('00:39:38');

-> 2378

 

[예제]

쿼리문으로 날짜계산
$query = "SELECT (now() - interval ′1 month′)::timestamp"; // 현재 부터 한 달 전 날짜

$query = "SELECT (now() + interval ′6 month′)::timestamp"; // 현재 부터 6 달 후 날짜 ...

 

[Q/A] mysql에서 타임스탬프값을 날짜값으로 바꿔주는 함수 있나요?
select from_unixtime(날짜필드) ...

하시면 우리가 보는 시간으로 보일거예요~

 

 

[MySQL에서 제공하는 날자 관련 함수]

DAYOFMONTH(date) : 날짜만 리턴해주는 함수. (1-31) 한달을 단위로.
DAYOFYEAR(date) : 이역시 날짜만 리턴. (1-366) 1년을 단위로.
TO_DAYS(date) : 연도와 달을 모두 날짜화 시켜서 리턴해줍니다.
                            (1999-01-01 = (1999 * 365) + (01 * 31) + 1)
MONTH(date) : 달을 리턴해주는 함수.
DAYNAME(date) : 요일을 문자로 리턴. (ex :'Thursday')
MONTHNAME(date) : 달을 문자로 리턴. (ex :'February')
WEEK(date) : 해당 연도에 몇번째 주인지를 리턴 (0-52)
YEAR(date) : 연도를 리턴 (1000-9999)
HOUR(time) : 시간 리턴 
MINUTE(time) : 분 리턴
SECOND(time) : 초 리턴

DATE_FORMAT(date,format)

     `%W'    Weekday name (`Sunday'..`Saturday')
     `%D'    Day of the month with english suffix (`1st', `2nd', `3rd',
             etc.)
     `%Y'    Year, numeric, 4 digits
     `%y'    Year, numeric, 2 digits
     `%a'    Abbreviated weekday name (`Sun'..`Sat')
     `%d'    Day of the month, numeric (`00'..`31')
     `%e'    Day of the month, numeric (`0'..`31')
     `%m'    Month, numeric (`01'..`12')
     `%c'    Month, numeric (`1'..`12')
     `%b'    Abbreviated month name (`Jan'..`Dec')
     `%j'    Day of year (`001'..`366')
     `%H'    Hour (`00'..`23')
     `%k'    Hour (`0'..`23')
     `%h'    Hour (`01'..`12')
     `%I'    Hour (`01'..`12')
     `%l'    Hour (`1'..`12')
     `%i'    Minutes, numeric (`00'..`59')
     `%r'    Time, 12-hour (`hh:mm:ss [AP]M')
     `%T'    Time, 24-hour (`hh:mm:ss')
     `%S'    Seconds (`00'..`59')
     `%s'    Seconds (`00'..`59')
     `%p'    `AM' or `PM'
     `%w'    Day of the week (`0'=Sunday..`6'=Saturday)
     `%U'    Week (`0'..`52'), Sunday is the first day of the week.
     `%u'    Week (`0'..`52'), Monday is the first day of the week.
     `%%'    Single `%' characters are ignored.  Use `%%' to produce a
             literal `%' (for future extensions).

'DB' 카테고리의 다른 글

Supabase: 차세대 백엔드 서비스 솔루션 🚀  (3) 2025.06.04
[MyBatis] RDBMS별 like 검색처리 방법  (0) 2020.06.13
[MyBatis] 동적쿼리 foreach문  (0) 2020.06.13
[DB] Join의 종류  (0) 2020.05.30

+ Recent posts