문자열 중간에 문자열을 끼워넣기 위해서 보통은 SUBSTR로 잘라낸 뒤 CONCAT 또는 || 로 붙이게 되는데 특정 함수로 가져와야 되는 문자열의 경우 함수를 여러번 쓸 필요없이 REGEXP_REPLACE 함수와 정규식을 이용하여 처리 가능하다. SELECT REGEXP_REPLACE(‘0224’, ‘(^.{2})’, ‘\1/‘) AS MMDD FROM DUAL; 위 쿼리문은 문자열 시작부터 문자2개까지 매치된 문자열을 해당문자열 + “/“ 로 치환하라는 것이기에 문자열 0224 는 02/24 로 변환된다. 참고. 괄호로 둘러싼 단위는 그룹을 나타냄 {숫자}는 숫자만큼 있음 .은 아무문자 1개 (공백포함) ^는 문자열의 시작 (만약 [] 안에 쓰여지는 경우 패턴 불일치의 의미)
대출 프로그램 작성 시 상환계획을 임시로 보여주기 위하여 납부일이 휴일인지 여부를 확인하여 목록을 가져오기 위한 쿼리를 기록으로 남깁니다. 매월 25일를 가져오는데 휴일인 경우 익영업일로 가져오기 /* 매월 25일 중 휴일은 성탄절 하루 12월의 휴일은 성탄절 하나. 대체휴일 24, 26일중 휴일은 없음. */ SELECT TO_CHAR(TRUNC(S.DT,'MM'),'YYYYMMDD') AS SDT , CASE WHEN TO_CHAR(S.DT,'D') IN (1,7) THEN TO_CHAR((S.DT + (2-MOD( TO_CHAR(S.DT,'D') ,7))),'YYYYMMDD') ELSE TO_CHAR(S.DT,'YYYYMMDD') END AS CDT FROM ( SELECT CASE WHEN TO_..
오라클에서 날짜정보를 가져올 때 적용 포맷문자열을 기록하기 위하여 남깁니다. SELECT TO_CHAR(TRUNC(D.DT,'MM'),'YYYYMMDD') AS "해당월의 첫날" , TO_CHAR(LAST_DAY(D.DT),'YYYYMMDD') AS "해당월의 마지막날" , TO_CHAR(D.DT,'YEAR') AS "년의 영문명" , TO_CHAR(D.DT,'YYYY') AS "년도4자리" , TO_CHAR(D.DT,'YY') AS "년도2자리" , TO_CHAR(D.DT,'MONTH') AS "개월의 영문명" , TO_CHAR(D.DT,'MON') AS "개월의 영문약어" , TO_CHAR(D.DT,'MM') AS "개월2자리" , TO_CHAR(D.DT,'DAY') AS "요일" , TO_CHAR(..
타입을 별도로 선언하는 것도 좋지만 패키지로 선언해서 사용하는 것이 편리하다. PACKAGE TYPES AS /* 범용 커서 */ TYPE CURSORTYPE IS REF CURSOR; /* 정의된 레코드 */ TYPE 정의REC IS RECORD( 컬럼명1 VARCHAR2(50), 컬럼명2 NUMBER(10), 컬럼명3 NUMBER(20), 컬럼명4 NUMBER(5) ); /* 정의 커서 */ TYPE 정의TYPE IS REF CURSOR; RETURN 정의REC; END; 법용적으로 사용되는 커서의 경우 따로 정의할 필요없이 바로 바로 사용이 가능하지만 어떤 정보가 넘어올 지 알 수가 없기 때문에 변수를 선언한 후 받아야 한다. (물론 java 등에서 받을 때는 ResultSet으로 받으면 되지만....
업무에 활용할 쿼리를 만들다 보면 여러 레코드 데이터를 한줄로 표시해야 하는 경우가 있다. 최대 레코드수를 알수있다면 쉽게 해결할테지만 불특정 다수의 레코드를 가로로 표현하는 것은 단순 쿼리로만은 어렵죠. SELECT LTRIM(MAX(SYS_CONNECT_BY_PATH(S,',')),',') AS STR FROM ( SELECT S,M,ROW_NUMBER() OVER (ORDER BY N) AS LN , COUNT (*) OVER (partition by M ) cnt FROM ( SELECT 10*rownum as s , ROWNUM N , mod(rownum,3) as m FROM ( SELECT null FROM dual GROUP BY CUBE(1,2,3,4,5,6,7,8) ) WHERE ROW..
- Total
- Today
- Yesterday