써보자

Projects/일반론 2011. 10. 16. 00:42
Mindjet
CodeBeamer 

'Projects > 일반론' 카테고리의 다른 글

ip와 dns를 바꿔주는 bat  (0) 2011.04.14
MySQL - 날짜 함수  (0) 2011.01.11
내가 짠 서브쿼리 2 Subquery in MySQL  (0) 2010.12.17
Posted by 병아리
매번 찾아서 다시 적기 짜증....


'Projects > 일반론' 카테고리의 다른 글

써보자  (0) 2011.10.16
MySQL - 날짜 함수  (0) 2011.01.11
내가 짠 서브쿼리 2 Subquery in MySQL  (0) 2010.12.17
Posted by 병아리
// 출처 : http://jeongsam.net/112

MySQL 함수

날짜 함수

NOW(), CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(), LOCALTIME, LOCALTIME(), LOCALTIMESTAMP, LOCALTIMESTAMP()

현재 시간을 리턴합니다.

SYSDATE()

'YYYY-MM-DD HH:MM:SS' 또는 'YYYYMMDDHHMMSS' 형식으로 현재 날짜나 시간을 리턴합니다. 5.0.13 버전이후부터는 SYSDATE()는 실행 시점의 시간을 표시하므로 NOW()와 차이점이 있습니다. 아래 명령을 실행하여 차이점을 확인하세요.

SELECT NOW(), SLEEP(2), NOW();
SELECT SYSDATE(), SLEEP(2), SYSDATE();

CURDATE(), CURRENT_DATE, CURRENT_DATE()

'YYYY-MM-DD' 또는 'YYYYMMDD' 형식으로 현재 날짜를 리턴합니다.

CURTIME(), CURRENT_TIME, CURRENT_TIME()

'HH:MM:SS' 또는 'HHMMSS.uuuuuu' 형식으로 현재 시간을 리턴합니다.

DATE_FORMAT(date,format)

date로 지정된 날짜른 format에 의해 표시합니다.

기호설명
%a Sun, ..., Sat와 같은 요일의 약어 표시
%b Jan, ..., Dec와 같은 달이름 약어 표시
%c 1 ~ 12 사이의 월 표시
%D 1st, 2nd, ... 와 같은 형식의 달의 날짜 표시
%d 00, ..., 31 형식의 달의 날짜 표시
%e 0, ..., 31 형식의 달의 날짜 표시
%f 마이크로초 표시
%H 24시간 형식의 시간 표시(00, ..., 23)
%h, %I 12시간 형식의 시간 표시(01, ..., 12 )
%i 분 표시(00, ..., 59)
%j 년의 날짜 표시(001, ..., 366)
%k 24시간 표시(0, ..., 23)
%l 12시간 표시(1, ..., 12)
%M 달 이름 표시(Jenuary, ..., December)
%m 달 순서 표시(00, ..., 12)
%p AM, PM 표시
%r 12시간제 표시(HH:MM:SS AM or PM)
%S, %s 초 표시(00, ..., 59)
%T 24시간제 표시(HH:MM:SS)
%U 일요일을 시작으로 년의 몇번째 주인가를 00, ..., 53으로 표시한다.
%u 월요일을 시작으로 년의 몇번째 주인가를 00, ..., 53으로 표시한다.
%V %X와 함께 쓰여 일요일을 시작으로 년의 몇번째 주인가를 01, ..., 53으로 표시한다.
%v %x와 함께 쓰여 월요일을 시작으로 년의 몇번째 주인가를 01, ..., 53으로 표시한다.
%W 요일명 표시(Sunday, ..., Saturday)
%w 요일의 순서를 표시(0=Sunday, ..., 6=Saturday)
%X %V와 함께 쓰이며 일요일을 시작하는 주를 기준으로 YYYY 형태의 년도를 표시한다.
%x %v와 함께 쓰이며 월요일을 시작하는 주를 기준으로 YYYY 형태의 년도를 표시한다.
%Y YYYY 형식으로 년도를 표시한다.
%y YY 형식으로 년도를 표시한다.
%% % 문자를 표시한다.

 

GET_FORMAT({DATE|TIME|DATETIME}, {'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL'})

특정 국가의 형식으로 표시합니다. 메뉴얼을 참고 하세요.

YEAR(date)

'1000'에서 '9999' 사이의 년도를 리턴합니다.

QUARTER(date)

분기를 1 ~4 로 리턴합니다.

MONTH(date)

월을 1 ~ 12 로 리턴합니다.

MONTHNAME(date)

월 이름을 리턴합니다.

WEEK(date[,mode])

요일 순서를 출력합니다. mode가 지정되면 특정 조건에 맞는 값을 리턴합니다.

ModeFirst day of weekRangeWeek 1 is the first week ...
0 Sunday 0-53 with a Sunday in this year
1 Monday 0-53 with more than 3 days this year
2 Sunday 1-53 with a Sunday in this year
3 Monday 1-53 with more than 3 days this year
4 Sunday 0-53 with more than 3 days this year
5 Monday 0-53 with a Monday in this year
6 Sunday 1-53 with more than 3 days this year
7 Monday 1-53 with a Monday in this year

WEEKDAY(date)

요일 순서를 리턴합니다. (0=Sunday, 1=Monday, ..., 6=Saturday)

WEEKOFYEAR(date)

년중 주의 순서를 리턴합니다. WEEK(date, 3)과 동일한 표현입니다.

YEARWEEK(date), YEARWEEK(date,mode)

해당되는 년도 및 주를 리턴합니다. mode는 WEEK() 함수와 동일한 동작을 합니다.

DAYNAME(date)

요일 이름을 리턴합니다.

DAYOFYEAR(date)

년중 날짜를 리턴합니다.

DAY(date), DAYOFMONTH(date)

월중 날짜를 리턴합니다.

DAYOFWEEK(date)

주중 순서를 리턴합니다. (1=Sunday, 2=Monday, ..., 7=Saturday)

LAST_DAY(date)

해당 월의 마지막 날짜를 리턴합니다.

DATE(expr)

date나 datetime 형식에서 date 부분만 리턴합니다.

HOUR(time)

시간을 리턴합니다.

MINUTE(time)

분을 리턴합니다.

SECOND(time)

초를 리턴합니다.

TIME(expr)

time이나 datetime 형식에서 time 부분만 리턴합니다.

MICROSECOND(expr)

마이크로초를 리턴합니다.

PERIOD_ADD(P,N)

P기간에 N달만큼 더한 결과를 YYYYMM 형태로 리턴합니다.

PERIOD_DIFF(P1,P2)

YYMM 이나 YYYYMM 형식의 P1과 P2 사이가 몇 달인지를 리턴합니다.

DATE_ADD(date,INTERVAL expr unit), ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)

date로부터 expr만큼 type 단위로 더한 날짜를 리턴합니다.

unitexpr
MICROSECOND 마이크로초
SECOND
MINUTE
HOUR 시간
DAY 날짜
WEEK 주차
QUOTER 분기
YEAR
SECOND_MICROSECOND '초.마이크로초'
MINUTE_MICROSECOND '분:초.마이크로초'
MINUTE_SECOND '분:초'
HOUR_MICROSECOND '시:분:초.마이크로초'
HOUR_SECOND '시:분:초'
HOUR_MINUTE '시:분'
DAY_MICROSECOND '일 시:분:초.마이크로초'
DAY_SECOND '일 시:분:초'
DAY_MINUTE '일 시:분'
DAY_HOUR '일 시'
YEAR_MONTH '년-월'

DATE_SUB(date,INTERVAL expr unit), SUBDATE(date,INTERVAL expr unit), SUBDATE(expr,days)

date로부터 expr만큼 unit 단위로 뺀 날짜를 리턴합니다.

DATEDIFF(expr1,expr2)

expr1과 expr2 사이의 일 수를 리턴합니다.

TIMEDIFF(expr1,expr2)

expr1과 expr2 사이의 시간을 time 형식으로 리턴합니다.

ADDTIME(expr1,expr2)

date나 datetime 형식의 expr1에 time 형식의 expr1을 더한 time 형식의 값을 리턴합니다.

SUBTIME(expr1,expr2)

date나 datetime 형식의 expr1에 time 형식의 expr1을 뺀 time 형식의 값을 리턴합니다.

TIMESTAMP(expr), TIMESTAMP(expr1,expr2)

date나 datetime 형식의 시간을 datetime 형식으로 리턴합니다. expr2가 주어지면 해당 시간으로 시간을 지정합니다.

TIMESTAMPADD(unit,interval,datetime_expr)

datetime_expr로부터 interval만큼 unit 단위로 더한 시간를 리턴합니다.

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

datetime_expr1과 datetieme_expr2 사이를 unit 단위로 리턴합니다.

TIME_FORMAT(time,format)

time 형식의 시간을 format 형식으로 리턴합니다. format은 DATE_FORMAT() 함수와 동일합니다.

EXTRACT(unit FROM date)

date로부터 unit 형식으로 값을 리턴합니다.

SELECT EXTRACT(YEAR FROM SYSDATE());
SELECT EXTRACT(MONTH FROM SYSDATE());
SELECT EXTRACT(DAY FROM SYSDATE());

FROM_DAYS(N)

0년부터 계산되 날 수로부터 날짜를 리턴합니다.

TO_DAYS(date)

date를 기준으로 0년부터 계산된 날 수를 리턴합니다. 그레고리력을 따르지 않습니다.

SEC_TO_TIME(seconds)

초를 time 형식으로 리턴합니다.

TIME_TO_SEC(time)

time 형식의 시간을 초로 리턴합니다.

STR_TO_DATE(str,format)

문자열str을 format 형식의 시간으로 리턴합니다. format문자열은 DATE_FORMAT() 과 동일합니다.

MAKEDATE(year,dayofyear)

year와 day-of-year 값으로 date 형식(YYYY-MM-DD)의 날짜를 리턴합니다.

MAKETIME(hour,minute,second)

hour, minute, second 값으로 time 형식(HH:MM:SS)의 시간을 리턴합니다.

CONVERT_TZ(dt,from_tz,to_tz)

시간대 변경 함수.

FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format)

유닉스 타입의 시간을 리턴합니다.

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date)

유닉스 시간 ('1970-01-01 00:00:00' 기준)을 리턴합니다. date가 주어지면 date의 유닉스 시간을 리턴합니다.

UTC_DATE, UTC_DATE()

UTC 시간을 리턴합니다.

UTC_TIME, UTC_TIME()

UTC 시간을 리턴합니다.

UTC_TIMESTAMP, UTC_TIMESTAMP()

UTC 시간을 리턴합니다.

'Projects > 일반론' 카테고리의 다른 글

ip와 dns를 바꿔주는 bat  (0) 2011.04.14
내가 짠 서브쿼리 2 Subquery in MySQL  (0) 2010.12.17
내가 짠 서브쿼리 Subquery in MySQL  (0) 2010.12.17
Posted by 병아리
sql을 오랜만에 + 서브쿼리는 처음 써보니 앞에꺼 만드는데 1시간, 뒤에꺼 같이 깔끔하게 한번 쓰게끔 바꾸는데 2시간 걸린 듯. 그래도 오랜만에 해보니 기억이 다시 새록새록 나서 좋네.

나도 sql 잘 짜고 싶다...



내가 하려고 했던거...

SELECT
*
, c.capacity - SUM(r.quantity) AS remain
FROM
enfant_caterer.caterers AS c
INNER JOIN
enfant_caterer.caterer_reservations AS r
ON
r.caterer_id = c.id
WHERE
r.reserved = '2011-01-01'
AND c.fee <= '10'
AND c.type = '1'
GROUP BY
caterer_id
HAVING
remain >= '6'
AND remain <= '500'


Posted by 병아리
나중에 필요할 때 다시 보기

SELECT
*
FROM
enfant_place.places AS p
WHERE
p.capacity >= '1'
AND p.capacity <= '3'
AND p.fee <= '3'
AND NOT EXISTS
(
SELECT *
FROM enfant_place.place_reservations AS r
WHERE
r.place_id = p.id
AND r.reserved = '2011-01-06'
)
Posted by 병아리
물론 insert 후 values 조건 그대로 select 해서 알아내도 되지만

php에서는 아예 메소드가 있다던데 자바라고 없을쏘냐?

그래서 구글링을 좀 해보니 다음과 같은 방법이 있었다

Statement stmt = conn.createStatement();
stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS);
System.out.println(stmt.getGeneratedKeys().getMetaData().getColumnName(1));
return stmt.getGeneratedKeys();

실행해보면 알겠지만 

GENERATED_KEY 라고 나온다

이걸 이용해서

resultSet.getInt(1);

로 인터넷에 나와있으니까 그냥 맹목적으로 따라하는 식으로 하지 않고 아래와 같이 자신이 직접 뭔지 알고 할 수도 있다

resultSet.getInt("GENERATED_KEY");

getInt("id") 이딴거 암만 해봤자 절대 안나온다

ReseltSetMetaData에는 저 메소드 말고도 다른 유용해 보이는 것들이 몇개 더 보이니 필요에 따라 갖다 쓰시면 될 듯 함미당
Posted by 병아리
맨날 또 찾고 또 찾고 하다 결국 못찾지 말고 이참에 적어두자

Posted by 병아리
현재 릴리즈되는 벨로시티에 대한 제대로 된 설치법이 없어서 나중에 나도 참고할 겸 적어놓음.

이 포스팅은 velocity의 properties등을 쓰거나, 자세한 세부사항 세팅법, 서블릿에서 벨로시티를 쓰는 법, VTL에 관련된 포스팅이 아닙니다.

이외의 것들은 다른 블로그를 참고하세요.

저같이 간단한 vtl사용법은 아는데 실제 톰캣 모듈에 벨로시티를 빠르고 '간단'하게 추가하는 법을 알고 싶은 상황에 맞는 포스팅입니다.

검색해보시면 아시겠지만 구글에 나오는 설치법들은 예전에 한분이 써 놓으신 걸 여기저기 펌해놓은 것 밖에 보이지 않습니다. 아니면 너무 이전 설명이거나 그냥 '막' 따라하기에는 좀 복잡해서 무리가 있더군요... 또 잘 되는 것 같지도 않고요...

서두가 길었네요.

1. 아파치 벨로시티로 가서 Tools를 다운받는다.

2. lib 폴더 안에 있는 commons-*.jar파일과 velocity-1.6.x.jar, velocity-tools-2.x.jar 파일을 deploy할 톰캣 모듈의 lib에 추가해준다.

현재 1.6.2와 2.0이 릴리즈 되고 있습니다.

3. web.xml에 다음을 추가해준다. (톰캣 6.x입니다. 현재 버전에 맞게 하세요.)

<servlet>
<servlet-name>velocity</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>

servlet-name이나 url-pattern은 취향에 맞게 바꿔주셔도 됩니다.

4. sample 파일을 올리고 들어가보면 아마 보일겁니다.
Posted by 병아리

아무리 구글에서 검색어를 바꿔가며 찾아도 안 나오는 걸 해외 포럼 이전 기록 뒤져서 간신히...

두 가지 방법이 있음.

1. #2000-01-01# 로 바꾼다.

2. cDate('2000/01/01') 로 바꾼다.

나만 몰랐나 ㅡㅡ?

Posted by 병아리
Posted by 병아리

사이드바 열기