데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요.. 데이터베이스 초보라 질의 드립니다.
test
id | date | x | y |
1 | 2018-10-08 10:52 | 3 | 1 |
1 | 2018-10-08 10:53 | 5 | 1 |
1 | 2018-10-08 10:54 | 4 | 1 |
* date는 05시 ~ 21시 까지 있습니다.
* id는 1부터 약 500까지 있습니다..
5시에 date의 x값 = a
, 21시 date의 x값 = b 라고 할때
DELETE test
WHERE CONVERT(VARCHAR(10), date, 20)='2018-10-08 AND (x < a OR x > b)
을 하려고합니다.. 하루는 상관이없는데
2013년도부터 2018년도까지 하기엔 계속 date를 수정해주어야해서요..
또한 id도 1부터 약 500까지 있어서
프로그램적으로 자동으로 순차시키면서 데이터를 지울수 있는지 질의드립니다 ㅠ
책을보고 구글에 검색해봐도
지식깊이가 낮아 좀 해결이안되더라구요..
도움좀 부탁드리겠습니다 ! ㅠㅠ
내용을 잘 이해하지 못해 쿼리를 완성을 못했지만, 참고하셔서 작성하시면 될것 같아요.
declare @i int = 1
declare @i_max int = 500
declare @a int = 1 ;
declare @b int = 1 ;
declare @date datetime ;
while ( @i <= @i_max )
begin
select top 1 @date = CONVERT(VARCHAR(10),[date], 20) from test where id = @i;
select top 1 @a = x from test where id = @i
and datepart(hour, [date]) = 5
select top 1 @b = x from test where id = @i
and datepart(hour, [date]) = 21
delete test
where id = @i and CONVERT(VARCHAR(10), [date], 20) = CONVERT(VARCHAR(10),@date, 20) and (x < @a OR x > @b)
set @i += 1;
end