728x90
반응형
생일에 날짜범위를 지정하기위한 방법은
아래와 같이 처리할것
------------------------------------------------------------------------------------
SELECT LPAD(ROWNUM,6,'0') AS 사번 --//6자리숫자 고정
, INITCAP(DBMS_RANDOM.STRING('A', 6)) AS 성 --//첫글자대문자
, INITCAP(DBMS_RANDOM.STRING('A', 10)) AS 이름 --//첫글자대문자
, DBMS_RANDOM.STRING('X', 5) AS 관리유형 --//5글자문자 고정
, TO_CHAR(SYSDATE - DBMS_RANDOM.VALUE(3650,7300),'YYYYMMDD') AS 생일
FROM DUAL
CONNECT BY LEVEL <= 10000
------원본내용------
문제> 쿼리작성
아래 셈플형식을 참고하여,
10000줄짜리 임의 데이터 생성쿼리를 작성하시오.
- 사용목적
테이블 작업후, 데이터가 없어,
업무분석이 어려울때, 임의로 데이터를 생성해서,
추가후에 임시로 작업을 진행할수 있다.
셈플형식
SELECT '123963' AS 사번 --//6자리숫자 고정
, 'Asdfasdf' AS 성 --//첫글자대문자
, 'Hewerw' AS 이름 --//첫글자대문자
, 'AR001' AS 관리유형 --//5글자문자 고정
, '20160801' AS 생일 --//8자리날짜범위내의 문자
FROM DUAL
;
--1111111
SELECT LPAD(TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1,999999))),6,'0') AS EMP_COD
, DBMS_RANDOM.STRING('U', 1)||DBMS_RANDOM.STRING('L', 6) AS LAST_NAME
, DBMS_RANDOM.STRING('U', 1)||DBMS_RANDOM.STRING('L', 12) AS FIRST_NAME
, DBMS_RANDOM.STRING('U', 2)||CEIL(DBMS_RANDOM.VALUE(100, 999)) AS MNG_TYP
, ROUND(DBMS_RANDOM.VALUE(1900,2000))||TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1,12)),'FM09')||TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1,28)),'FM09') AS BIRTH_DAY
FROM DUAL
CONNECT BY LEVEL <= 10000
--ORDER BY EMP_COD, LAST_NAME, FIRST_NAME, BIRTH_DAY
--//날짜형식에 29,30,31일이 빠질수 있음
--- 22222222
SELECT LPAD(TRUNC(DBMS_RANDOM.VALUE(1,10000)),6,'0') AS 사번 --//6자리숫자 고정
,INITCAP(DBMS_RANDOM.STRING('A', 10))AS 성 --//첫글자대문자
,INITCAP(DBMS_RANDOM.STRING('A', 10)) AS 이름 --//첫글자대문자
,DBMS_RANDOM.STRING('A', 5) AS 관리유형 --//5글자문자 고정
,TO_CHAR(TRUNC(DBMS_RANDOM.VALUE(20000101,21000101)) ) AS 생일 --//8자리날짜범위내의 문자
FROM DUAL
CONNECT BY LEVEL <= 1000;
--//날짜가 날짜형식범위에 있어야함
--3333333
SELECT 사번
, 성
, 이름
, 관리유형
, 년 || 월 ||
DECODE(월,01, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,02, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,03, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,04, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,05, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,06, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,07, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,08, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,09, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,10, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,11, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,12, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
) AS 생일
FROM(SELECT LPAD(TRUNC(DBMS_RANDOM.VALUE(1,999999)),6,'0') AS 사번
, DBMS_RANDOM.STRING('U',1)||DBMS_RANDOM.STRING('L',9) AS 성
, DBMS_RANDOM.STRING('U',1)||DBMS_RANDOM.STRING('L',19) AS 이름
, TO_CHAR(DBMS_RANDOM.STRING('U',2)||LPAD(TRUNC(DBMS_RANDOM.VALUE(0,999)),3,0)) AS 관리유형
, TRUNC(DBMS_RANDOM.VALUE(1900,2016)) AS 년
, LPAD(TRUNC(DBMS_RANDOM.VALUE(1,12)),2,0) AS 월
, LPAD(TRUNC(DBMS_RANDOM.VALUE(1,31)),2,0) AS 일
FROM DUAL
CONNECT BY LEVEL <= 10000) TEMP_TABLE
--//CASE WHEN LAST_DAY처리시 오류
문제> 쿼리작성
아래 셈플형식을 참고하여,
10000줄짜리 임의 데이터 생성쿼리를 작성하시오.
- 사용목적
테이블 작업후, 데이터가 없어,
업무분석이 어려울때, 임의로 데이터를 생성해서,
추가후에 임시로 작업을 진행할수 있다.
셈플형식
SELECT '123963' AS 사번 --//6자리숫자 고정
, 'Asdfasdf' AS 성 --//첫글자대문자
, 'Hewerw' AS 이름 --//첫글자대문자
, 'AR001' AS 관리유형 --//5글자문자 고정
, '20160801' AS 생일 --//8자리날짜범위내의 문자
FROM DUAL
;
--1111111
SELECT LPAD(TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1,999999))),6,'0') AS EMP_COD
, DBMS_RANDOM.STRING('U', 1)||DBMS_RANDOM.STRING('L', 6) AS LAST_NAME
, DBMS_RANDOM.STRING('U', 1)||DBMS_RANDOM.STRING('L', 12) AS FIRST_NAME
, DBMS_RANDOM.STRING('U', 2)||CEIL(DBMS_RANDOM.VALUE(100, 999)) AS MNG_TYP
, ROUND(DBMS_RANDOM.VALUE(1900,2000))||TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1,12)),'FM09')||TO_CHAR(ROUND(DBMS_RANDOM.VALUE(1,28)),'FM09') AS BIRTH_DAY
FROM DUAL
CONNECT BY LEVEL <= 10000
--ORDER BY EMP_COD, LAST_NAME, FIRST_NAME, BIRTH_DAY
--//날짜형식에 29,30,31일이 빠질수 있음
--- 22222222
SELECT LPAD(TRUNC(DBMS_RANDOM.VALUE(1,10000)),6,'0') AS 사번 --//6자리숫자 고정
,INITCAP(DBMS_RANDOM.STRING('A', 10))AS 성 --//첫글자대문자
,INITCAP(DBMS_RANDOM.STRING('A', 10)) AS 이름 --//첫글자대문자
,DBMS_RANDOM.STRING('A', 5) AS 관리유형 --//5글자문자 고정
,TO_CHAR(TRUNC(DBMS_RANDOM.VALUE(20000101,21000101)) ) AS 생일 --//8자리날짜범위내의 문자
FROM DUAL
CONNECT BY LEVEL <= 1000;
--//날짜가 날짜형식범위에 있어야함
--3333333
SELECT 사번
, 성
, 이름
, 관리유형
, 년 || 월 ||
DECODE(월,01, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,02, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,03, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,04, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,05, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,06, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,07, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,08, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,09, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,10, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,11, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
,12, CASE WHEN 일 < SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) THEN 일 ELSE SUBSTR(LAST_DAY(TO_DATE((년||월),'YYYYMM')),7,2) END
) AS 생일
FROM(SELECT LPAD(TRUNC(DBMS_RANDOM.VALUE(1,999999)),6,'0') AS 사번
, DBMS_RANDOM.STRING('U',1)||DBMS_RANDOM.STRING('L',9) AS 성
, DBMS_RANDOM.STRING('U',1)||DBMS_RANDOM.STRING('L',19) AS 이름
, TO_CHAR(DBMS_RANDOM.STRING('U',2)||LPAD(TRUNC(DBMS_RANDOM.VALUE(0,999)),3,0)) AS 관리유형
, TRUNC(DBMS_RANDOM.VALUE(1900,2016)) AS 년
, LPAD(TRUNC(DBMS_RANDOM.VALUE(1,12)),2,0) AS 월
, LPAD(TRUNC(DBMS_RANDOM.VALUE(1,31)),2,0) AS 일
FROM DUAL
CONNECT BY LEVEL <= 10000) TEMP_TABLE
--//CASE WHEN LAST_DAY처리시 오류
728x90
반응형
'DB-Oracle' 카테고리의 다른 글
다중Row결과를 단일행 가로쿼리로 출력 (0) | 2022.12.01 |
---|---|
계층구조 조회쿼리 (0) | 2022.12.01 |
oracle CONNECT BY 계층구조 쿼리에 대한 이해 (0) | 2022.12.01 |
oracle DB 리스너 IP 및 포트 변경 법 (0) | 2022.12.01 |
oracle 달력출력 쿼리 (0) | 2022.12.01 |