[SQL] SQL을 사용하여 날짜 범위를 생성
SQLSQL을 사용하여 날짜 범위를 생성
(I 함수에 던져한다면) 나는 날짜 매개 변수를 SQL 쿼리를하고 난 작년의 모든 일에서 실행해야합니다.
나는이 작업을 수행하는 SQL 직선까지 사용할 수 있도록하는 방법, 마지막 365일의 목록을 생성하는?
물론 이후로 난 항상 할 수도 0..364이 작동 할 목록을 생성 :
SELECT SYSDATE - val FROM (...);
해결법
-
==============================
1.초대형 테이블이나 ALL_OBJECTS 테이블을 사용할 필요가 없습니다 :
초대형 테이블이나 ALL_OBJECTS 테이블을 사용할 필요가 없습니다 :
SELECT TRUNC (SYSDATE - ROWNUM) dt FROM DUAL CONNECT BY ROWNUM < 366
트릭을 할 것입니다.
-
==============================
2.
SELECT (sysdate-365 + (LEVEL -1)) AS DATES FROM DUAL connect by level <=( sysdate-(sysdate-365))
날짜 '에'행 '및 경우 SYSDATE 및 SYSDATE-365 대신에 대체되어, 출력에서 날짜의 날짜 사이의 범위 일 것이다.
-
==============================
3.최근에 나는 비슷한 문제를 가지고이 쉽게 쿼리를 해결 :
최근에 나는 비슷한 문제를 가지고이 쉽게 쿼리를 해결 :
SELECT (to_date(:p_to_date,'DD-MM-YYYY') - level + 1) AS day FROM dual CONNECT BY LEVEL <= (to_date(:p_to_date,'DD-MM-YYYY') - to_date(:p_from_date,'DD-MM-YYYY') + 1);
예
SELECT (to_date('01-05-2015','DD-MM-YYYY') - level + 1) AS day FROM dual CONNECT BY LEVEL <= (to_date('01-05-2015','DD-MM-YYYY') - to_date('01-04-2015','DD-MM-YYYY') + 1);
결과
01-05-2015 00:00:00 30-04-2015 00:00:00 29-04-2015 00:00:00 28-04-2015 00:00:00 27-04-2015 00:00:00 26-04-2015 00:00:00 25-04-2015 00:00:00 24-04-2015 00:00:00 23-04-2015 00:00:00 22-04-2015 00:00:00 21-04-2015 00:00:00 20-04-2015 00:00:00 19-04-2015 00:00:00 18-04-2015 00:00:00 17-04-2015 00:00:00 16-04-2015 00:00:00 15-04-2015 00:00:00 14-04-2015 00:00:00 13-04-2015 00:00:00 12-04-2015 00:00:00 11-04-2015 00:00:00 10-04-2015 00:00:00 09-04-2015 00:00:00 08-04-2015 00:00:00 07-04-2015 00:00:00 06-04-2015 00:00:00 05-04-2015 00:00:00 04-04-2015 00:00:00 03-04-2015 00:00:00 02-04-2015 00:00:00 01-04-2015 00:00:00
-
==============================
4.오라클 특정하고, 기존의 대형 테이블 또는 데이터 사전 객체를 통해 복잡한 시스템 뷰에 의존하지 않습니다.
오라클 특정하고, 기존의 대형 테이블 또는 데이터 사전 객체를 통해 복잡한 시스템 뷰에 의존하지 않습니다.
SELECT c1 from dual MODEL DIMENSION BY (1 as rn) MEASURES (sysdate as c1) RULES ITERATE (365) (c1[ITERATION_NUMBER]=SYSDATE-ITERATION_NUMBER) order by 1
-
==============================
5.꽤 자주 오라클에서 사용하는 방법은 다음과 같이이다 :
꽤 자주 오라클에서 사용하는 방법은 다음과 같이이다 :
select trunc(sysdate)-rn from ( select rownum rn from dual connect by level <= 365) /
응용 프로그램이 날짜 목록에 대한 필요가있는 경우 개인적으로, 나는 단지 그들과 함께 테이블을 만들거나 이런 종류의 물건에 사용될 수 백만 같은 말도 안되는 일까지 정수의 일련의 테이블을 만들 것입니다.
-
==============================
6.일년 너무 늦게 반 정도,하지만 여기에 후대를 위해 테라 데이타를위한 버전입니다 :
일년 너무 늦게 반 정도,하지만 여기에 후대를 위해 테라 데이타를위한 버전입니다 :
SELECT calendar_date FROM SYS_CALENDAR.Calendar WHERE SYS_CALENDAR.Calendar.calendar_date between '2010-01-01' (date) and '2010-01-03' (date)
-
==============================
7.1996년 12월 31일와 2020-12-31 사이의 날짜 범위
1996년 12월 31일와 2020-12-31 사이의 날짜 범위
SELECT dt, to_char(dt, 'MM/DD/YYYY') as date_name, EXTRACT(year from dt) as year, EXTRACT(year from fiscal_dt) as fiscal_year, initcap(to_char(dt, 'MON')) as month, to_char(dt, 'YYYY') || ' ' || initcap(to_char(dt, 'MON')) as year_month, to_char(fiscal_dt, 'YYYY') || ' ' || initcap(to_char(dt, 'MON')) as fiscal_year_month, EXTRACT(year from dt)*100 + EXTRACT(month from dt) as year_month_id, EXTRACT(year from fiscal_dt)*100 + EXTRACT(month from fiscal_dt) as fiscal_year_month_id, to_char(dt, 'YYYY') || ' Q' || to_char(dt, 'Q') as quarter, to_char(fiscal_dt, 'YYYY') || ' Q' || to_char(fiscal_dt, 'Q') as fiscal_quarter --, EXTRACT(day from dt) as day_of_month, to_char(dt, 'YYYY-WW') as week_of_year, to_char(dt, 'D') as day_of_week FROM ( SELECT dt, add_months(dt, 6) as fiscal_dt --starts July 1st FROM ( SELECT TO_DATE('12/31/1996', 'mm/dd/yyyy') + ROWNUM as dt FROM DUAL CONNECT BY ROWNUM < 366 * 30 --30 years ) WHERE dt <= TO_DATE('12/31/2020', 'mm/dd/yyyy') )
-
==============================
8.Ahahaha, 여기 그냥 이렇게하는 내놓았다 재미있는 방법이있다 :
Ahahaha, 여기 그냥 이렇게하는 내놓았다 재미있는 방법이있다 :
select SYSDATE - ROWNUM from shipment_weights sw where ROWNUM < 365;
여기서 shipment_weights 어떤 큰 테이블이고;
-
==============================
9.나도 같은 요구를했다 - 난 그냥 사용합니다. 사용자는 그 / 그녀의 일정 범위를 제한하고자하는 일 수를 입력합니다.
나도 같은 요구를했다 - 난 그냥 사용합니다. 사용자는 그 / 그녀의 일정 범위를 제한하고자하는 일 수를 입력합니다.
SELECT DAY, offset FROM (SELECT to_char(SYSDATE, 'DD-MON-YYYY') AS DAY, 0 AS offset FROM DUAL UNION ALL SELECT to_char(SYSDATE - rownum, 'DD-MON-YYYY'), rownum FROM all_objects d) where offset <= &No_of_days
I는 LEFT OUTER에서보기 날짜가 테이블에 관련된 다른 전망 JOIN 구동으로 상기 결과 집합을 사용한다.
-
==============================
10.6개월 뒤쪽에서 주
6개월 뒤쪽에서 주
SELECT (date'2015-08-03' + (LEVEL-1)) AS DATES FROM DUAL where ROWNUM < 8 connect by level <= (sysdate-date'2015-08-03');
당신이 ROWNUM을 생략하는 경우는 값의 독립적 인 50 개 행을 얻을.
-
==============================
11.그것의 재미를 위해, 여기에 SQL 서버, 오라클, 또는 MySQL의에서 작동해야 할 몇 가지 코드는 :
그것의 재미를 위해, 여기에 SQL 서버, 오라클, 또는 MySQL의에서 작동해야 할 몇 가지 코드는 :
SELECT current_timestamp - CAST(d1.digit + d2.digit + d3.digit as int) FROM ( SELECT digit FROM ( select '1' as digit union select '2' union select '3' union select '4' union select '5' union select '6' union select '7' union select '8' union select '9' union select '0' ) digits ) d1 CROSS JOIN ( SELECT digit FROM ( select '1' as digit union select '2' union select '3' union select '4' union select '5' union select '6' union select '7' union select '8' union select '9' union select '0' ) digits ) d2 CROSS JOIN ( SELECT digit FROM ( select '1' as digit union select '2' union select '3' union select '4' union select '5' union select '6' union select '7' union select '8' union select '9' union select '0' ) digits ) d3 WHERE CAST(d1.digit + d2.digit + d3.digit as int) < 365 ORDER BY d1.digit, d2.digit, d3.digit -- order not really needed here
당신이 나에게로 크로스 플랫폼 구문 줄 수있는 경우 보너스 포인트는 숫자 테이블을 재-사용합니다.
-
==============================
12.안하는 것보다 늦게하는 것이 낫다. (A) 일 오늘을 통해 현재 월의 1, PLUS (b)는 최근 2 개월간의 모든 날짜 : 여기에 포함 날짜 목록을 반환 내가 (이 기사를 읽은 후) 고안하는 방법이다 :
안하는 것보다 늦게하는 것이 낫다. (A) 일 오늘을 통해 현재 월의 1, PLUS (b)는 최근 2 개월간의 모든 날짜 : 여기에 포함 날짜 목록을 반환 내가 (이 기사를 읽은 후) 고안하는 방법이다 :
select (sysdate +1 - rownum) dt from dual connect by rownum <= (sysdate - add_months(sysdate - extract(day from sysdate),-2));
은 "-2"를 포함하는 날짜의 사전 개월간의 수입니다. 즉이 전체 이전 달 플러스는 현재 부분적 월 - 예를 들어, 7 월 10 일,이 SQL 7 월 10까지 5 월 1 일부터 모든 날짜의 목록을 반환합니다.
-
==============================
13.나는 숫자 테이블을 다시 사용에 대한 답을 가지고 있지 않지만 여기에 SQL 서버 적어도 일을하고 조금 빠른 것 코드 샘플입니다.
나는 숫자 테이블을 다시 사용에 대한 답을 가지고 있지 않지만 여기에 SQL 서버 적어도 일을하고 조금 빠른 것 코드 샘플입니다.
print("code sample"); select top 366 current_timestamp - row_number() over( order by l.A * r.A) as DateValue from ( select 1 as A union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10 union select 11 union select 12 union select 13 union select 14 union select 15 union select 16 union select 17 union select 18 union select 19 union select 20 union select 21 ) l cross join ( select 1 as A union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10 union select 11 union select 12 union select 13 union select 14 union select 15 union select 16 union select 17 union select 18 ) r print("code sample");
-
==============================
14.이 쿼리는 (http://blogs.x2line.com/al/articles/207.aspx에 영감) 날짜 4천일 오늘 같은 과거에 미래 5000의 목록을 생성합니다 :
이 쿼리는 (http://blogs.x2line.com/al/articles/207.aspx에 영감) 날짜 4천일 오늘 같은 과거에 미래 5000의 목록을 생성합니다 :
SELECT * FROM (SELECT (CONVERT(SMALLDATETIME, CONVERT(CHAR,GETDATE() ,103)) + 4000 - n4.num * 1000 - n3.num * 100 - n2.num * 10 - n1.num) AS Date, year(CONVERT(SMALLDATETIME, CONVERT(CHAR,GETDATE() ,103)) + 4000 - n4.num * 1000 - n3.num * 100 - n2.num * 10 - n1.num) as Year, month(CONVERT(SMALLDATETIME, CONVERT(CHAR,GETDATE() ,103)) + 4000 - n4.num * 1000 - n3.num * 100 - n2.num * 10 - n1.num) as Month, day(CONVERT(SMALLDATETIME, CONVERT(CHAR,GETDATE() ,103)) + 4000 - n4.num * 1000 - n3.num * 100 - n2.num * 10 - n1.num) as Day FROM (SELECT 0 AS num union ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n1 ,(SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n2 ,(SELECT 0 AS num union ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) n3 ,(SELECT 0 AS num UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8) n4 ) GenCalendar ORDER BY 1
from https://stackoverflow.com/questions/418318/generate-a-range-of-dates-using-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] IN의 배열 () 절 오라클 PLSQL (0) | 2020.05.14 |
---|---|
[SQL] 어떻게 PostgreSQL의 행의 최대 수에 관한 제약 조건을 작성하는? (0) | 2020.05.14 |
[SQL] 왜 우리는 GROUP BY 집계 함수에 필요합니까? (0) | 2020.05.14 |
[SQL] 외부 키로서 복합 키 (SQL) (0) | 2020.05.14 |
[SQL] VARBINARY에 문자 / VARCHAR에서 mysql을 변환하는 방법 (0) | 2020.05.13 |