금주간의 게시물 SQL로 한큐에 뽑아내기!
페이지 정보
본문
1> 시작하기에 앞써 잘못된 생각 바로잡기
1.1> 한주의 시작은 일요일이다.
-> 어떤분들은 월요일이 한주의 시작인것으로 알고있지만 한주의 시작은 일요일입니다.
2> 실전에 앞써...
2.1> MySQL에서 날짜관련 함수
2.1.1> DATE_ADD(a, INTERVAL b DAY)
-> a날짜에서 b날만큼 더한다.
2.1.2> DATE_SUB(a, INTERVAL b DAY)
-> a날짜에서 b날만큼 뺀다.
2.1.3> CURDATE()
-> 현재 날짜를 출력한다. cf> NOW() 함수는 현재날짜 및 현재 시간을 출력한다.
2.1.4> DAYOFWEEK(a)
-> a날짜가 위치한 요일의 주(weekday) 인덱스값을 출력한다. ex>일=1, 월=2, 토=7
3> 실전연습
3.1> 이번주 첫 날짜만 알아내기(날짜기준)
SELECT DATE_SUB(CURDATE(), INTERVAL(DAYOFWEEK(CURDATE()) - 1) DAY)
3.2> 현재시각 기준으로 첫 날짜 및 시간 알아내기(현재시각 기준)
SELECT DATE_SUB(NOW(), INTERVAL(DAYOFWEEK(NOW()) - 1) DAY)
3.3> 이번주 끝 날짜만 알아내기(날짜기준)
SELECT DATE_ADD(CURDATE(), INTERVAL(7 - DAYOFWEEK(CURDATE())) DAY)
3.4> 현재시각 기준으로 끝 날짜 및 시간 알아내기(현재시각 기준)
SELECT DATE_ADD(NOW(), INTERVAL(7 - DAYOFWEEK(NOW())) DAY)
잘 보시면...
CURDATE() 가 NOW() 로 바뀌신것을 알수 있습니다.
테이블을 구성하실때 필드타입 선언에 있어서 이것이 좀 중요한 이유는...
예를들면 날짜가 DATETIME, 즉 '2004-01-17 13:45:12' 로 기록되어 있는데...
시작날짜하고 끝 날짜만 알아내서 비교구문(between)을 때린다면...
분명 끝일에 해당하는 리스트들은 출력하고자 하는 리스트에서 제외될것입니다.
왜냐하면
끝 날짜 '2004-01-17' 을 '2004-01-17 00:00:00'으로 인식하기 때문이죠...
분명 '2004-01-17 00:00:00'는 같은 1월 17일 이긴 하지만...
'2004-01-17 13:45:12' 보다는 작습니다.
이해하셨는지 모르겠네여...
필드의 날짜 포맷에 따라 SQL을 적절히 조절할 필요가 있습니다.
아무튼...
특정날짜에 대해서 출력하려면...
CURDATE() 부분에 특정날짜를 넣어주면 되겠죠?
예를들어 2004년 1월 15일의 그 주 시작일과 끝일을 알고싶다면
시작일 : SELECT DATE_SUB('2004-01-15', INTERVAL(DAYOFWEEK('2004-01-15') - 1) DAY)
끝일 : SELECT DATE_ADD('2004-01-15', INTERVAL(7 - DAYOFWEEK('2004-01-15')) DAY)
이해하셨는지 모르겠군여...^^;
자...
orderlist(주문리스트) 란 테이블에 orderday(주문일) 라는 필드가 있고
orderday는 DATE 타입, 즉 '2004-02-10' 형태로 기록될 때 주문일이 금주인 주문리스트만 추출하고 싶다면 아래와 같이 하면 되겠죠?
SELECT * FROM orderlist WHERE orderday BETWEEN DATE_SUB(CURDATE(), INTERVAL(DAYOFWEEK(CURDATE()) - 1) DAY) AND DATE_ADD(CURDATE(), INTERVAL(7 - DAYOFWEEK(CURDATE())) DAY)
이상입니다. ^^;
P.S>
분명 필드의 DATE 포맷에 따라 SQL을 적절히 조절하셔야 한다고 말씀드렸구요...
위의 SQL은 필드타입이 DATE 일때 적용될 수 있습니다.
이해하셨길 바라며...^^;
##################################################
최근 일주일 자료들
$dayago7=date('Y-m-d',(time()-(86400*6)));
where date_format(regdate,'%Y-%m-%d') >= '$dayago7'
또는
where date_format(regdate,'%Y-%m-%d') >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
이번주가 해당월의 몇째주차인지 뽑아오기....
<?
$connect = db_connect("test");
// 해당월의 몇주차인지 찾아내기
function MonthWeek($tmpweek)
{
Global $connect;
//해당월의 1일 날짜 구하기
$fsql = "select DAYOFWEEK('{$tmpweek[0]}-{$tmpweek[1]}-01')";
$fresult = mysql_query($fsql);
$frow = mysql_fetch_array($fresult);
$reval[vmon] = (int)$tmpweek[1];
$sday = 1;
$stopdate = (int)$tmpweek[2];
if($frow[0] == 2 || $frow[0] == 3 || $frow[0] == 4 || $frow[0] == 5)
{
for($i=1;$i<7;$i++)
{
$pluscha = ($i == 1)?7-$frow[0]+2:7;
$sday += $pluscha;
if($stopdate < $sday) break;
}
$vweek = $i;
}
else
{
for($i=0;$i<6;$i++)
{
$pluscha = ($i == 0)?7-$frow[0]+2:7;
$sday += $pluscha;
if($stopdate < $sday) break;
}
$vweek = $i;
}
$reval[vweek] = (int)$vweek;
return $reval;
}
//시작일 (한 주간은 월요일부터 ~ 일요일까지로 <-- 클라이언트의 요구였음.)
$ssql = "SELECT DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2) DAY) as sdate";
$sresult = mysql_query($ssql);
$srow = mysql_fetch_array($sresult);
$sdate = $srow[sdate];
//끝나는일
$esql = "select DATE_FORMAT(DATE_ADD('$sdate', interval 6 day),'%Y-%m-%d') as edate";
$eresult = mysql_query($esql);
$erow = mysql_fetch_array($eresult);
$edate = $erow[edate];
$tmpweekstart = explode("-",$sdate);
$tmpweekend = explode("-",$edate);
$tmpweek = $tmpweekstart; // 해당월의 기준달
// 시작일 끝나는일 같은달인경우
if($tmpweekstart[1] != $tmpweekend[1])
{
$fsql = "select DAYOFWEEK('{$tmpweekend[0]}-{$tmpweekend[1]}-01')";
$fresult = mysql_query($fsql);
$frow = mysql_fetch_array($fresult);
if($frow[0] == 2 || $frow[0] == 3 || $frow[0] == 4 || $frow[0] == 5)
{ //매월 1일의 시작일이 월화수목 일경우 첫째주로 함... 금토일은 이전달의 마지막주로 함
$tmpweek = $tmpweekend;
}
}
$monweekcul = MonthWeek($tmpweek);
// 해당주간의 차수뽑기 end
echo "이번주는 {$monweekcul[vmon]}월 {$monweekcul[vweek]}주차(" . (int)$tmpweekstart[2]."일~".(int)$tmpweekend[2]."일) 입니다";
?>
####### 오늘의 일주일 전의 날짜 계산...
1. mysql query
$sql = "SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY)";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$weekago = $row[0];
2. time
$weekago= date('Y-m-d',(time()-(86400*7)));
3. strtotime
$weekago= date('Y-m-d',strtotime("-7 day"));
1.1> 한주의 시작은 일요일이다.
-> 어떤분들은 월요일이 한주의 시작인것으로 알고있지만 한주의 시작은 일요일입니다.
2> 실전에 앞써...
2.1> MySQL에서 날짜관련 함수
2.1.1> DATE_ADD(a, INTERVAL b DAY)
-> a날짜에서 b날만큼 더한다.
2.1.2> DATE_SUB(a, INTERVAL b DAY)
-> a날짜에서 b날만큼 뺀다.
2.1.3> CURDATE()
-> 현재 날짜를 출력한다. cf> NOW() 함수는 현재날짜 및 현재 시간을 출력한다.
2.1.4> DAYOFWEEK(a)
-> a날짜가 위치한 요일의 주(weekday) 인덱스값을 출력한다. ex>일=1, 월=2, 토=7
3> 실전연습
3.1> 이번주 첫 날짜만 알아내기(날짜기준)
SELECT DATE_SUB(CURDATE(), INTERVAL(DAYOFWEEK(CURDATE()) - 1) DAY)
3.2> 현재시각 기준으로 첫 날짜 및 시간 알아내기(현재시각 기준)
SELECT DATE_SUB(NOW(), INTERVAL(DAYOFWEEK(NOW()) - 1) DAY)
3.3> 이번주 끝 날짜만 알아내기(날짜기준)
SELECT DATE_ADD(CURDATE(), INTERVAL(7 - DAYOFWEEK(CURDATE())) DAY)
3.4> 현재시각 기준으로 끝 날짜 및 시간 알아내기(현재시각 기준)
SELECT DATE_ADD(NOW(), INTERVAL(7 - DAYOFWEEK(NOW())) DAY)
잘 보시면...
CURDATE() 가 NOW() 로 바뀌신것을 알수 있습니다.
테이블을 구성하실때 필드타입 선언에 있어서 이것이 좀 중요한 이유는...
예를들면 날짜가 DATETIME, 즉 '2004-01-17 13:45:12' 로 기록되어 있는데...
시작날짜하고 끝 날짜만 알아내서 비교구문(between)을 때린다면...
분명 끝일에 해당하는 리스트들은 출력하고자 하는 리스트에서 제외될것입니다.
왜냐하면
끝 날짜 '2004-01-17' 을 '2004-01-17 00:00:00'으로 인식하기 때문이죠...
분명 '2004-01-17 00:00:00'는 같은 1월 17일 이긴 하지만...
'2004-01-17 13:45:12' 보다는 작습니다.
이해하셨는지 모르겠네여...
필드의 날짜 포맷에 따라 SQL을 적절히 조절할 필요가 있습니다.
아무튼...
특정날짜에 대해서 출력하려면...
CURDATE() 부분에 특정날짜를 넣어주면 되겠죠?
예를들어 2004년 1월 15일의 그 주 시작일과 끝일을 알고싶다면
시작일 : SELECT DATE_SUB('2004-01-15', INTERVAL(DAYOFWEEK('2004-01-15') - 1) DAY)
끝일 : SELECT DATE_ADD('2004-01-15', INTERVAL(7 - DAYOFWEEK('2004-01-15')) DAY)
이해하셨는지 모르겠군여...^^;
자...
orderlist(주문리스트) 란 테이블에 orderday(주문일) 라는 필드가 있고
orderday는 DATE 타입, 즉 '2004-02-10' 형태로 기록될 때 주문일이 금주인 주문리스트만 추출하고 싶다면 아래와 같이 하면 되겠죠?
SELECT * FROM orderlist WHERE orderday BETWEEN DATE_SUB(CURDATE(), INTERVAL(DAYOFWEEK(CURDATE()) - 1) DAY) AND DATE_ADD(CURDATE(), INTERVAL(7 - DAYOFWEEK(CURDATE())) DAY)
이상입니다. ^^;
P.S>
분명 필드의 DATE 포맷에 따라 SQL을 적절히 조절하셔야 한다고 말씀드렸구요...
위의 SQL은 필드타입이 DATE 일때 적용될 수 있습니다.
이해하셨길 바라며...^^;
##################################################
최근 일주일 자료들
$dayago7=date('Y-m-d',(time()-(86400*6)));
where date_format(regdate,'%Y-%m-%d') >= '$dayago7'
또는
where date_format(regdate,'%Y-%m-%d') >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)
이번주가 해당월의 몇째주차인지 뽑아오기....
<?
$connect = db_connect("test");
// 해당월의 몇주차인지 찾아내기
function MonthWeek($tmpweek)
{
Global $connect;
//해당월의 1일 날짜 구하기
$fsql = "select DAYOFWEEK('{$tmpweek[0]}-{$tmpweek[1]}-01')";
$fresult = mysql_query($fsql);
$frow = mysql_fetch_array($fresult);
$reval[vmon] = (int)$tmpweek[1];
$sday = 1;
$stopdate = (int)$tmpweek[2];
if($frow[0] == 2 || $frow[0] == 3 || $frow[0] == 4 || $frow[0] == 5)
{
for($i=1;$i<7;$i++)
{
$pluscha = ($i == 1)?7-$frow[0]+2:7;
$sday += $pluscha;
if($stopdate < $sday) break;
}
$vweek = $i;
}
else
{
for($i=0;$i<6;$i++)
{
$pluscha = ($i == 0)?7-$frow[0]+2:7;
$sday += $pluscha;
if($stopdate < $sday) break;
}
$vweek = $i;
}
$reval[vweek] = (int)$vweek;
return $reval;
}
//시작일 (한 주간은 월요일부터 ~ 일요일까지로 <-- 클라이언트의 요구였음.)
$ssql = "SELECT DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) - 2) DAY) as sdate";
$sresult = mysql_query($ssql);
$srow = mysql_fetch_array($sresult);
$sdate = $srow[sdate];
//끝나는일
$esql = "select DATE_FORMAT(DATE_ADD('$sdate', interval 6 day),'%Y-%m-%d') as edate";
$eresult = mysql_query($esql);
$erow = mysql_fetch_array($eresult);
$edate = $erow[edate];
$tmpweekstart = explode("-",$sdate);
$tmpweekend = explode("-",$edate);
$tmpweek = $tmpweekstart; // 해당월의 기준달
// 시작일 끝나는일 같은달인경우
if($tmpweekstart[1] != $tmpweekend[1])
{
$fsql = "select DAYOFWEEK('{$tmpweekend[0]}-{$tmpweekend[1]}-01')";
$fresult = mysql_query($fsql);
$frow = mysql_fetch_array($fresult);
if($frow[0] == 2 || $frow[0] == 3 || $frow[0] == 4 || $frow[0] == 5)
{ //매월 1일의 시작일이 월화수목 일경우 첫째주로 함... 금토일은 이전달의 마지막주로 함
$tmpweek = $tmpweekend;
}
}
$monweekcul = MonthWeek($tmpweek);
// 해당주간의 차수뽑기 end
echo "이번주는 {$monweekcul[vmon]}월 {$monweekcul[vweek]}주차(" . (int)$tmpweekstart[2]."일~".(int)$tmpweekend[2]."일) 입니다";
?>
####### 오늘의 일주일 전의 날짜 계산...
1. mysql query
$sql = "SELECT DATE_SUB(CURDATE(), INTERVAL 7 DAY)";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$weekago = $row[0];
2. time
$weekago= date('Y-m-d',(time()-(86400*7)));
3. strtotime
$weekago= date('Y-m-d',strtotime("-7 day"));
- 이전글여러체크 박스 처리 21.02.09
- 다음글이미지(그림) 사이즈 구하기 21.02.09
댓글목록
등록된 댓글이 없습니다.