oracle13 [Oracle] LAG, LEAD - 이전 로우, 이후 로우 값 반환 오라클 함수 중 이전 row나 이후 row의 값을 확인해야 하는 경우가 종종 있다. 이럴 때 쓰는 함수가 LAG(), LEAD() 함수들이다. ▶ LAG - 명시된 값을 기준으로 이전 로우의 값 반환 LAG(조건, 순서, 디폴트) OVER (PARTITION BY 절) ▶ LEAD - 명시된 값을 기준으로 이후 로우의 값 반환 LEAD(조건, 순서, 디폴트) OVER (PARTITION BY 절) LAG(), LEAD() 예시 SQL문 SELECT ID , AMT , LAG(ID) OVER(ORDER BY ID) AS PREV_ID , LEAD(ID) OVER(ORDER BY ID) AS NEXT_ID , LEAD(ID,2,'ID없음') OVER(ORDER BY ID) AS T_NEXT_ID FROM T.. DB/Oracle 2023. 7. 5. [Oralce] ORA-01476: divisor is equal to zero - 제수가 0입니다. 쿼리를 짜다가 ORA-01476: divisor is equal to zero 에러가 발생했다. 에러가 발생한 이유는 제수가 0이기 때문이다. 즉, 분모가 0이여서 발생하는 에러이다. 분모에는 0이 올 수 없다. 운영 DB로 넘어가기 전 개발 DB에서 클렌징을 하고 다시 TEST를 진행하면서 분모가 0인 경우가 발생하여 위 에러를 마주했다.. 데이터가 많이 항상 분모는 0이 아닐 거라 생각하고 쿼리를 짜서 그랬던 것 같다. 본론으로 돌아가서, ORA-01476:divisor is equal to zero 에러 해결법은 분모 값이 0이 온다면 CASE ~ WHEN ~ THEN문 및 NVL(), COALESCE() 이용하여 해결할 수 있다. * CASE ~ WHEN ~ THEN문 및 NVL() 사용 SELE.. DB/Oracle 2023. 3. 29. [SQL] NULL값과 ‘’(공백) 비교 DB에서의 NULL을 알아보자 !!Oracle, Tibero, MSSQL에서 NULL은 없는값이 아니라 모르는값이다.그래서 AAA = NULL이 아니고 AAA IS NULL인 것이다.그렇기 때문에 없다면 ‘ ’(스페이스)를 넣어야 된다 ! 처음에는 왜 스페이스를 넣는가 했는데 이유가 있었다..!!! Oracle과 Tibero에서는 컬럼에 ‘’과 NULL은 같습니다. (‘' : 스페이스 없는 따옴표 열고닫고 ) SELECT CASE WHEN ‘’ IS NULL THEN ‘NULL’ ELSE ‘NOT NULL’ END FROM dual; : 위 쿼리의 결과는 NULL이다. 가끔 NOT IN이나 NOT LIKE를 사용하여 해당되지 않은 값은 빼고 조회할 때, NULL과 ‘’인값은 안 나오니 주의.하.. DB/SQL 2023. 3. 22. [Oracle] CASE문 - CASE WHEN 표현식 사용법 오라클 CASE문 사용법 - CASE WHEN THEN ELSE END 표현식 사용 방법 오라클에서 if문을 사용할 때 대게 DECODE 함수를 떠올릴 것이다. 하지만 DECODE 함수는 오라클 SQL에서만 사용할 수 있는 비표준함수이고 조건이 많아지면 복잡해지고 가독성이 떨어지는 단점을 갖고 있다 ㅠ_ㅠ ,,, 오라클에서 DECODE 함수 대신하여 쓸 수 있는 것이 CASE 표현식이다 !CASE 문은 DECODE 함수보다 좀 더 확장적이며 가독성이 뛰어나다. 복잡한 조건을 따질 때는 CASE 표현식을 사용하는 것을 권장한다. CASE문 사용 방법을 알아보자 !! :D ▷ CASE문 사용 방법CASE문은 값이나 조건에 따라 다르게 결과값을 받아올 수 있다. 조건을 값으로 주냐 조건식으로.. DB/Oracle 2021. 2. 19. [Oracle] 순위 매기는 함수 RANK(), DENSE_RANK(), ROW_NUMBER() 비교 오라클 값에 따른 순위 매기기 (RANK함수/ DENSE_RANK함수/ ROW_NUMBER함수 사용법, 비교) 값에 따라 순위를 매겨 뿌릴 때 쿼리에서 뽑아올 수 있는 함수가 있어서 소개한당 ! 순위를 매기는 함수로는 RANK() , DENSE_RANK() , ROW_NUMBER() 이렇게 세 가지의 함수가 있는데, 각 함수마다 조금씩 특징이 다르다. 세가지 함수를 비교해보자 ! RANK() 함수 : 동일한 값에 대해 같은 순위를 부여하고 다음 순위는 누적 순위로 매긴다. DENSE_RANK() 함수 : 동일한 값에 대해 같은 순위를 부여하고 다음 순위는 누적시키지 않고 다음 순차로 순위를 매긴다. ROW_NUMBER() 함수 : 동일한 값에 대해 상관없이 순차적으로 순위를 부여한다. RANK 함수 DE.. DB/Oracle 2021. 2. 18. [Oracle] TO_CHAR 숫자 포맷(Format) 형식 _ FM표기법 오라클 TO_CHAR 숫자 포맷 형식 사용하기 / FM표기법 Oracle에서 숫자를 문자로 변환할 때 첫 번째 자리에 0이 있을 때 0이 생략되어 표출되는 경우가 있다. 예를 들어, '0.123'을 TO_CHAR로 변환했지만 0이 생략되어 '. 123'으로 표출될 것이다.이때 0이 생략되지 않고 그대로 출력시켜주는 Format 형식이 있다. FM 표기법TO_CHAR('숫자열', 'FM999.00')FM(Fill Mode) 표기법을 사용하면 숫자의 좌우 공백을 제거할 수 있습니다. 또한, 숫자의 형식을 지정할 때 다음과 같은 문자를 사용할 수 있습니다. - 9 : 가변적인 값으로 0이거나 숫자가 없을 시 값을 버린다. - 0 : 고정적인 값으로 변환된 숫자의 길이를 맞추고 싶으면 원하는 길이만큼 0.. DB/Oracle 2021. 2. 16. [Oracle] SQL 중복제거 DISTINCT 사용법 sql 데이터 중복제거 DISTINCT 사용방법 SQL 에서 SELECT 조회를 할 때 중복제거를 하여 조회하는 방법을 알아보자 !방법은 간단하다. SELECT 뒤에 DISTINCT를 사용하여 키워드를 넣어주고 사용하면입력한 키워드의 중복제거를 한 결과가 조회된당 !! [ DISTINCT 사용방법 ]SELECT TEST_NM, TEST_ID FROM TEST_INFOTEST_NMTEST_IDABCTEST1BBBTEST2DDDTEST3ZZZTEST2YYYTEST1 SELECT 바로 뒤에 DISTINCT(키워드)를 넣어주면 키워드의 중복제거가 되어 조회된다.여기서 유의할 점은 DISTINCT의 위치가 반드시 SELECT문 바로 뒤에 와야된당 !!! SELECT DISTINCT(TEST_ID).. DB/Oracle 2021. 2. 8. [Oracle] EXISTS와 IN 함수 차이 비교 오라클 EXISTS함수와 IN함수 차이 비교 (NOT EXISTS, NOT IN) 쿼리문을 작성할 때 WHERE절에서 사용되는 조건 EXISTS함수와 IN함수의 차이를 비교해보자 !어떤 점이 다르고 언제 EXISTS함수를 써야할지 IN함수를 써야할지 정리해본당 ( * _ *) 'EXISTS'함수와 'IN'함수는 WHERE절에서 서브쿼리를 사용하여 조건을 걸 때 자주 사용됩니다.두 함수는 비슷한 목적을 가지고 있지만, 사용 방식과 성능 면에서 차이가 있습니다.이 두 함수를 비교하여 언제 어떤 함수를 사용하는 것이 좋은지 알아보겠습니다. EXISTS 함수EXISTS는 서브쿼리가 하나 이상의 행을 반환하는지 여부를 확인하는 데 사용됩니다. 서브쿼리가 행을 반환하면 'TRUE', 그렇지 않으면 'FAL.. DB/Oracle 2021. 2. 4. [Oracle] 오라클 날짜 타입(TYPE)별 비교 - TO_CHAR,TO_DATE OracleDB 날짜 타입(TYPE)별 비교 방법 TO_CHAR, TO_DATE ORA-01861 리터럴이 형식 문자열과 일치하지 않음 오류 해결방법 쿼리를 짜고 실행했을 때 'ORA-01861 리터럴이 형식 문자열과 일치하지 않음' 오류가 발생할 경우가 있다. 주로 날짜를 비교할 때 String형과 Date형을 함께 비교했을 때거나 String에다가 Date를 넣는다던지 형타입을 맞춰주지 않고 값을 넣을때 발생한다. 이 때 TO_CHAR나 TO_DATE를 사용해서 형변환을 통해 날짜 타입(TYPE)을 맞춰주면 해결된다 !!! TO_CHAR(): String형 날짜 비교 Date -> String 으로 형변환TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')//결과//2.. DB/Oracle 2020. 11. 27. [SQL] Oracle SQL - DESC Oracle DB - SQL Developer에서 테이블컬럼 조회 명령어 OracleDB에서 쿼리를 짜다가 문자열 형식 오류로 테이블의 컬럼을 조회하고 싶을 때 간단하게 확인할 수 있는 명령어를 찾았다. - DESC [조회하고 싶은 테이블명]; 조회시 예시 결과 >>>>>> 이름 널? 유형 ------------------------ ----------------- ----------------- TEST_ID NOT NULL VARCHAR2(12) UPD_DTM DATE TEST_CP_NUM NUMBER(6,2) DESC는 Describe의 약자로 해당 테이블에 어떤 컬럼들로 구성되어 있는지와 각 컬럼의 TYPE도 알 수 있다. NOT NULL인지도 확인할 수 있어서 쿼리 짤때 유용하게 사용할 수 있는.. DB/SQL 2020. 11. 27. [Oracle] 오라클 시간 계산 / 표현식 Oracle DB 내 날짜시간비교를 위해 사용되어지는 시간 표현방법 1시간은 60분, 3600초이니 3600이라 표기하면 1시간으로 인식하는 줄 알았다...하지만 Oracle DB내 표현식에는 기준이 달랐다. Oracle DB 내 시간 기준은 1초가 아닌 하루 24시간이 기준이 된다.정리해보면, 1시간 : 1 / 24 1분 : 1 / (24*60) = 1 / 14401초 : 1 / (24*60*60) = 1 / 86400 현재시간과의 과거/미래 시간 계산을 예시로 살펴보자 ! [before]8초 전 : SYSDATE - 8 / 8640020분 전 : SYSDATE - 20 / 1440 [after]15초 후 : SYSDATE + 15 / 864009분후 : SYSDATE + 9 / 1440 .. DB/Oracle 2020. 11. 25. [Oracle] SQL Developer - Date Format 변경 SQL Developer로 Oracle 쿼리를 작성하고 db정보를 볼 때 Date Format을 변경할 수 있다. DB데이터를 보는데 Date가 RR/MM/DD(ex.20/11/09)로 되어있어서 데이터가 년/월/일만 들어가 있는 줄 알았다. 난 시간(시/분.초)까지 찍힌 Date 데이터가 필요했다. 데이터의 오류인줄 알았는데 데이터의 오류가 아니였다 !!!! 0 _ 0 . . . 실제로는 시/분/초까지 데이터가 들어가 있었지만 설정이 RR/MM/DD로 되어있어서 년/월/일만 보여진 것이었다. SQL Developer에서는 기본 Date 출력 포맷이 RR/MM/DD로 설정되어있다. Date 포맷을 시/분/초까지 출력하도록 환경설정을 통해서 적용할 수 있다. 도구 [Tools] -> 환경설정 [Prefer.. DB/SQL 2020. 11. 9. 이전 1 2 다음 728x90