안녕하세요? 새배 복 많이 받으세요. ^^
또 한번 고수님들께 도움을 요청합니다.
DB에 있는 데이타들을 임의의 특정시점 (예를 들어서 오늘)에 검색을 하여 3개월 이전의 데이타는 모두 삭제를 하도록 하려고 합니다. (데이타 저장기간을 3개월로 하려고 합니다)
그런데 SQL 을 어떻게 날려야 할지 난감해서 도움을 요청해봅니다.
DB : SQL 서버
Table 명 : visit
----------------------------------------------------------
visitDate : datetime
phone : nVarchar(12)
name : nVarchar(30)
type : nchar (4)
point1 : numeric(5,1)
point2 : numeric(5,1)
----------------------------------------------------------
Form 에 DBGrid 를 놓고, point1 과 point2가 5 미만이면서, 현재부터 3개월 이전의 모든 데이타를 출력해서 Button1 을 누르면 해당 데이타를 모두 삭제하려는 프로그램을 만들어 보려고 하는데..
procedure TFrm_erase.FormActivate(Sender: TObject);
var
wDate : TDateTime;
begin
wDate := date - 90 //3개월 전을 어떻게 표현할지 몰라서 대략 90일로 써본 거에요
with Qry_erase do
begin
close;
SQL.Clear;
SQL.Add('select phone, name, point1, point2, visitDate from visit ');
SQL.Add('where ((point1 < 5) and (visitDate < :date)) or
((point2 < 5) and (visitDate < :date))');
Parameters[0].Value := wDate;
open;
end;
end;
뭐 이런 식으로 해봤는데.. 아무것도 나오지도 않는군요.. 날짜계산을 저렇게 하는 것이 맞는 것인지...
이래저래 검색하다가 비슷해 보이길래 파라미터값을 저런 식으로 넣어봤는데 맞는 건지 모르겠네요.
그리고 where 절에서 날짜를 부등호로 비교를 하는 것이 맞는 건가요?
고수님들의 가르침을 기다리겠습니다.
P.S 컴파일 에러도 안나고 데이타는 안나오고 해서 영문을 모르겠습니다. ㅎㅎ;;;
참고로 델파이 7 사용하고 있고, ADO 로 MSSQL 서버를 연결해서 사용하고 있습니다.
<!--CodeS-->
//현재로 부터 3개월전
function Now_3Month:TDateTime;
var
Year, Month, Day: Word;
DayTable: PDayTable;
begin
Result := now;
//현재를 년월일로 만듭니다
DecodeDate(now, Year, Month, Day);
//현재를 월에서 3개월전 (주의) Year, Month, Day변수 형식이 Word라서 음수계산이 안됩니다
if Month -3 < 1 then Month := 12 + (Month -3)
else Month := Month -3;
//년월이 맞는지 1차검사
if (Year >= 1) and (Year <= 9999) and (Month >= 1) and (Month <= 12) then begin
//년월의 마직막 일자가 맞는지 2차검사, 년월의 마직막 일자 목록을 가져옵니다
DayTable := @MonthDays[IsLeapYear(Year)];
if (Day < 1) then Day := 1
else if (Day > DayTable^[Month]) then Day := DayTable^[Month]; //년월의 마직막 일자가 넘으면 마직막 일자로함
Result := EncodeDate(Year, Month, Day); //3개월전....
end;
end;
<!--CodeE-->