[SQL] 날짜와 SQL 삽입 문을 루핑
SQL날짜와 SQL 삽입 문을 루핑
나는 날짜를 제외하고는 동일한 정보로 할 때마다 데이터베이스를 채울 것입니다 문을 실행해야합니다.
메신저는 현재이 라인을 따라 뭔가를 시도하고 행운을 가지고 있지 않습니다.
DECLARE
i_int BINARY_INTEGER := 1;
BEGIN
WHILE i_int <= 30 LOOP
INSERT INTO bs_events (eventDate,eventTime,title,spaces,description,entryFee,payment_required,max_qty,allow_multiple) VALUES ('2011-03-i_int 00:00:00', '10:00','Carpet Cleaner 3000','4','This is rad','25.99','1','1','2');
i_int := i_int + 1;
END LOOP;
END;
/
나는 일에 그것을 얻을 수없는 것 메신저는 코드 구멍에 갇혀 똑바로 생각할 수 없다.
나는 기본적으로 01-30에서 하나까지 날짜를 원하는 다음 내가 수동으로 매월 변경되며, 올해 모두 12 개월 동안 스크립트를 다시 실행합니다.
해결법
-
==============================
1.일정 테이블을 만드는 것이 좋습니다.
일정 테이블을 만드는 것이 좋습니다.
내가 가진 모든 데이터베이스 I 작업에서 만드는 첫 번째 테이블은, 숫자의 테이블, 1 1000000에 이러한 테이블은 SQL에서 루프를 구현하는 등의 목적으로 많이 유용합니다. 달력 테이블 : 또한, 내가 가진 모든 데이터베이스 I 작업에 만든 두 번째 테이블을 생성 할 수 있습니다.
달력 테이블은 데이터베이스에서 처음으로 기록 된 비즈니스 이벤트 (년 정도 플러스)에서 시작하여, 각 날짜에 대해 하나의 행이 있습니다. 모든 관련 비즈니스 쿼리 (플러스 몇 년 안전을 위해) 충분한 미래의 날짜를 유지합니다.
특정 문제는 위의 테이블 중 하나를 사용하여 해결 될 수 있지만, 달력 테이블 접근 방식은 훨씬 쉬울 것이다.
나는 아래에 MySQL을 당신에게 사소한하지만 작업 예제를 제공합니다 :
create table digits(n int); insert into digits values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9); create table numbers( n int not null ,primary key(n) );
실제 숫자 테이블이 생성되면 숫자 표는 작업 테이블이 삭제됩니다된다. 숫자 테이블은 기본 키이다, 한 열이 있습니다. 다음으로, (그것은 천천히 소리,하지만 실제로 내 2 살 노트북에 10 초 이내에 완료) 1. 시작 1 개 백만 연속 정수를 생성합니다.
insert into numbers(n) select 1 + (d1.n * 1) + (d2.n * 10) + (d3.n * 100) + (d4.n * 1000) + (d5.n * 10000) + (d6.n * 100000) as n from digits d1 ,digits d2 ,digits d3 ,digits d4 ,digits d5 ,digits d6; /* Drop the working table. */ drop table digits;
다음으로, 나는 달력 테이블을 만듭니다. 이 유용한 열 필요가 없기 때문에 분명히 그것은 순간에 꽤 쓸모가 없다. 유용한 컬럼의 예로는 올해 MONTHNAME, 주 번호, isFirstMonthDay, isLastMonthDay, 회계 연도, isHoliday, Holidayname, DAYNAME, 분기, tertial 있습니다. 표준이 아닌 기간의 경우,이 황금이다.
create table calendar( datum date not null ,primary key(datum) );
자, 이제 우리는 우리의 달력 테이블을 구축하는 행 발전기 역할을, 예를 들어 숫자 테이블을 사용할 수 있습니다. 하자 내가 2000-01-01와 2019년 12월 31일 사이의 모든 날짜를 생성하고 싶은 말은. 즉 7천3백5일 될 것이다. 쉬운, 그냥 숫자 테이블에서 많은 행을 선택하고 날짜로 INT 열 N을 추가합니다. 이 증가하는 날짜의 목록을 작성합니다.
insert into calendar(datum) select date_add('1999-12-31', interval n day) from numbers where n <=7305;
끝난. 당신은 아마 당신은 단지 숫자 테이블을 사용하여 문제를 해결 한 수있는 방법을 볼 수 있을까?
마지막으로, 여기에 일정 테이블을 사용하여 특정 문제를 해결하는 방법의 예입니다. 당신은 연도와 월을 위해 열을 추가 한 경우는 물론 더 쉽게 될 것이다. 여기 내 말은 "올해의 나머지 부분에 대한 매월 매일 하나 개의 동일한 행을 생성"하는 질문을 해석하고있다.
insert into bs_events( eventDate, eventTime, title ,spaces, description, entryFee ,payment_required, max_qty, allow_multiple ) select datum, '10:00', 'Carpet Cleaner 3000' ,'4', 'This is rad', '25.99' ,'1', '1', '2' from calendar where datum >= date '2011-03-01' and datum <= date '2011-12-31';
-
==============================
2.당신은 당신의 날짜를 DATEADD (MS, i_int, GETDATE ()을) 시도 할 수 있습니다.
당신은 당신의 날짜를 DATEADD (MS, i_int, GETDATE ()을) 시도 할 수 있습니다.
-
==============================
3.
INSERT INTO bs_events (eventDate, ... ) VALUES ('2011-03-i_int 00:00:00', ...);
이 값은, 2011-03-i_int 00:00:00 문자열이 아닌 소인입니다. 당신은 당신의 SQL 환경이 심볼에 대해 i_int의 값을 대체 할 것이라고 기대했다. 그것은 그렇게하지 않습니다.
대신, INSERT 문 밖에 날짜 연산을한다.
PostgreSQL의에서 (PL / pgSQL의) 당신은 유형 '타임 스탬프'의 변수에 일을 추가하는이 작업을 수행 할 수 있습니다.
this_date = this_date + interval '1 day';
그리고 INSERT 문에서,
INSERT INTO bs_events (eventDate, ... ) VALUES (this_date, ...);
구문이 플랫폼이 될 수있는 것을 확인하려면 설명서를 참조하십시오.
-
==============================
4.
DECLARE i_int BINARY_INTEGER := 0; BEGIN WHILE i_int < 30 LOOP INSERT INTO bs_events ( eventDate, eventTime, title, spaces, description, entryFee, payment_required, max_qty, allow_multiple) VALUES ( DATEADD(day, i_int, '2011-03-01 00:00:00'), '10:00', 'Carpet Cleaner 3000', '4', 'This is rad', '25.99', '1', '1', '2'); i_int := i_int + 1; END LOOP; END; /
from https://stackoverflow.com/questions/5116369/looping-a-sql-insert-statement-with-dates by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL / C 번호 - 쿼리를 실행하기위한 최선의 방법 (0) | 2020.05.29 |
---|---|
[SQL] 대량로드 할 수 없습니다. 파일 "C : \ data.txt로"존재하지 않는 (0) | 2020.05.29 |
[SQL] 테이블에 레코드를 삽입 할 때 작은 따옴표로 문자열 필드는 오류의 원인이 (0) | 2020.05.29 |
[SQL] 널 (null) 값 vb.net에 대한 바운드 데이터 테이블을 확인 (0) | 2020.05.29 |
[SQL] SQL 서버에서 동적 SQL 피벗 (0) | 2020.05.29 |