다양한 데이터 유형에 대한 NVL 변환. SELECT 명령 Oracle nvl 설명의 분기 문

우리는 앞서 중첩된 함수에 대해 다루었습니다. 이제 좀 더 자세히 살펴보겠습니다. 또한 NULL 값을 사용하는 함수와 쿼리에서 분기 작업을 구현하는 데 도움이 되는 함수도 고려할 것입니다.

중첩된 함수

중첩 함수는 한 함수의 반환 값을 다른 함수에 대한 입력 매개 변수로 사용합니다. 함수는 항상 하나의 값만 반환합니다. 따라서 함수 호출의 결과를 다른 함수 호출에 대한 매개 변수로 사용할 때 값 리터럴로 처리할 수 있습니다. 문자열 함수는 모든 중첩 수준에 중첩될 수 있습니다. 하나의 함수 호출은 다음과 같습니다

함수1(매개변수1, 매개변수2, …) = 결과

함수 매개변수를 다른 함수에 대한 호출로 바꾸면 다음과 같은 표현식이 나타날 수 있습니다.

F1(param1.1, F2(param2.1, param2.2, F3(param3.1)), param1.3)

중첩된 함수는 그 결과가 다른 함수의 입력 값으로 사용되기 전에 먼저 평가됩니다. 함수는 가장 깊은 중첩 수준부터 왼쪽에서 오른쪽으로 최상위까지 평가됩니다. 이전 표현식은 다음과 같이 실행됩니다.

  1. 함수 F3(param1)이 평가되고 반환 값이 함수 2의 세 번째 매개변수로 사용됩니다. param2.3이라고 하겠습니다.
  2. 그런 다음 함수 F2(param1, param2.2, param2.3)가 평가되고 반환 값은 함수 F1 - param1.2의 두 번째 매개 변수로 사용됩니다.
  3. 마지막으로 함수 F1(param1, param2, param1.3)이 평가되고 결과가 호출 프로그램에 반환됩니다.

따라서 F3 함수는 세 번째 중첩 수준에 있습니다.

요청을 고려해보자

듀얼에서 next_day(last_day(sysdate)-7, 'tue')를 선택합니다.

  1. 이 쿼리에는 하위 수준에서 상위 수준까지 세 가지 함수(SYSDATE, LAST_DAY, NEXT_DAY)가 있습니다. 요청은 다음과 같이 수행됩니다.
  2. 중첩된 SYSDATE 함수가 실행됩니다. 현재 시스템 시간을 반환합니다. 현재 날짜가 2009년 10월 28일이라고 가정해 보겠습니다.
  3. 다음으로 두 번째 수준 함수 LAST_DAY의 결과가 계산됩니다. LAST_DATE('28-OCT-2009')는 2009년 10월의 마지막 날인 2009년 10월 31일을 반환합니다.
  4. 그런 다음 이 날짜에서 7일을 빼면 10월 24일이 됩니다.
  5. 마지막으로 NEXT_DAY('24-OCT-2009', 'tue') 함수가 평가되고 쿼리는 10월 마지막 화요일(이 예에서는 27-OCT-2009)을 반환합니다.

많은 중첩 함수 호출을 사용하여 복잡한 표현식을 이해하고 작성하는 것은 상당히 어렵지만 시간과 연습이 필요합니다. 이러한 표현식을 여러 부분으로 나누어 별도로 테스트할 수 있습니다. DUAL 테이블은 쿼리 및 함수 호출 결과를 테스트하는 데 매우 유용합니다. 작은 구성요소를 테스트하고 디버그한 다음 원하는 하나의 큰 표현식으로 결합할 수 있습니다.

분기 기능

IF-THEN-ELSE라고도 알려진 분기 함수는 일부 상황에 따라 실행 경로를 결정하는 데 사용됩니다. 분기 함수는 조건 평가 결과에 따라 다른 결과를 반환합니다. 이러한 함수 그룹에는 NULL 값 작업을 위한 함수(NVL, NVL2, NULLIF 및 COALESCE)가 포함됩니다. 그리고 DECODE 함수와 CASE 표현식으로 표현되는 공통 함수도 있습니다. DECODE 함수는 Oracle 함수인 반면 CASE 표현식은 ANSI SQL 표준에 있습니다.

NVL 기능

NVL 함수는 NULL에 대해 모든 데이터 유형의 열 또는 표현식 값을 테스트합니다. 값이 NULL이면 NULL이 아닌 대체 기본값을 반환하고, 그렇지 않으면 원래 값을 반환합니다.

NVL 함수에는 두 개의 필수 매개변수가 있으며 구문은 NVL(original, ifnull)입니다. 여기서 원본은 확인할 원래 값이고 ifnull은 원래 값이 NULL인 경우 함수에서 반환된 결과입니다. ifnull 매개변수와 원래 매개변수의 데이터 유형은 호환되어야 합니다. 즉, 데이터 유형이 동일해야 하거나 한 유형에서 다른 유형으로 값을 암시적으로 변환할 수 있어야 합니다. NVL 함수는 원래 매개변수의 데이터 유형과 동일한 데이터 유형의 값을 반환합니다. 세 가지 쿼리를 고려해 보겠습니다.

쿼리 1: 듀얼에서 nvl(1234)을 선택합니다.

쿼리 2: 듀얼에서 nvl(null, 1234)을 선택합니다.

쿼리 3: 이중에서 nvl(substr('abc', 4), '부분 문자열이 없습니다')를 선택합니다.

NVL 함수에는 두 개의 매개변수가 필요하므로 요청 1은 오류 ORA-00909: 잘못된 인수 개수를 반환합니다. 쿼리 2에서는 NULL 값이 확인되어 NULL이므로 1234를 반환합니다. 쿼리 3은 3자 길이의 문자열에서 네 번째 문자를 추출하여 NULL을 반환하는 중첩된 SUBSTR 함수와 'No sbustring presents'라는 문자열을 반환하는 NVL 함수를 사용합니다.

NVL 함수는 숫자 작업 시 매우 유용합니다. 숫자에 대한 산술 연산이 NULL을 반환하지 않도록 NULL 값을 0으로 변환하는 데 사용됩니다.

NVL 기능2

NVL2 함수는 NVL보다 더 많은 기능을 제공하지만 NULL 값을 처리하는 역할도 합니다. NULL에 대해 모든 유형의 열 또는 표현식 값을 테스트합니다. 값이 NULL이 아니면 두 번째 매개변수가 반환되고, 그렇지 않으면 원래 값을 반환하는 NVL 함수와 달리 세 번째 매개변수가 반환됩니다.

NVL2 함수에는 세 개의 필수 매개변수가 있으며 구문은 NVL2(original, ifnotnull, ifnull)입니다. 여기서 원본은 테스트 중인 값이고, ifnotnull은 원본이 NULL이 아닌 경우 반환되는 값이고, ifnull은 원본이 NULL인 경우 반환되는 값입니다. ifnotnull 및 ifnull 매개변수의 데이터 유형은 호환 가능해야 하며 LONG 유형일 수 없습니다. NVL2 함수에 의해 반환된 데이터 유형은 ifnotnull 매개변수의 데이터 유형과 동일합니다. 몇 가지 예를 살펴보겠습니다.

쿼리 1: 듀얼에서 nvl2(1234, 1, 'a string')을 선택합니다.

쿼리 2: 듀얼에서 nvl2(null, 1234, 5678)를 선택합니다.

쿼리 3: 이중에서 nvl2(substr('abc', 2), 'Not bc', 'No substring')을 선택합니다.

요청 1의 ifnotnull 매개변수는 숫자이고 ifnull 매개변수는 문자열입니다. 데이터 유형이 호환되지 않기 때문에 "ORA-01722: 잘못된 숫자" 오류가 반환됩니다. 쿼리 2는 원본이 NULL이고 결과가 5678이므로 ifnull 매개변수를 반환합니다. 쿼리 3은 'bc'를 반환하고 NVL2('bc','Not bc','No substring')을 호출하는 SUBSTR 함수를 사용합니다. ifnotnull 매개변수 – 'BC가 아님'.

NULLIF 함수

NULLIF 함수는 두 값이 동일한지 확인합니다. 동일하면 NULL이 반환되고, 그렇지 않으면 첫 번째 매개변수가 반환됩니다. NULLIF 함수에는 두 개의 필수 매개변수가 있으며 구문은 NULLIF(ifunequal, 비교_항목)입니다. 이 함수는 두 매개변수를 비교하여 동일하면 NULL을 반환하고, 그렇지 않으면 매개변수는 동일하지 않습니다. 요청을 고려해 봅시다

쿼리 1: 이중에서 nullif(1234, 1234)를 선택합니다.

매개변수가 동일하므로 쿼리 1은 NULL을 반환합니다. 쿼리 2의 문자열은 날짜로 변환되지 않고 문자열로 비교됩니다. 문자열의 길이가 다르기 때문에 ifunequal 매개변수는 2009년 7월 24일에 반환됩니다.

그림 10-4에서 NULLIF 함수는 NVL2 함수 내에 중첩되어 있습니다. NULLIF 함수는 ifunequal 매개변수 표현식의 일부로 SUBSTR 및 UPPER 함수를 사용합니다. EMAIL 열은 이름이 4자인 직원의 성과 결합된 이름의 첫 글자를 반환하는 이 표현식과 비교됩니다. 이러한 값이 동일하면 NULLIF는 NULL을 반환하고, 그렇지 않으면 ifunequal 매개 변수의 값을 반환합니다. 이 값은 NVL2 기능의 매개변수로 사용됩니다. NVL2는 비교된 요소가 일치하는지 여부에 대한 설명을 반환합니다.

그림 10-4 – NULLIF 함수 사용

COALESCE 기능

COALESCE 함수는 매개변수 목록에서 NULL이 아닌 첫 번째 값을 반환합니다. 모든 매개변수가 NULL이면 NULL이 반환됩니다. COALESCE 함수에는 두 개의 필수 매개변수와 임의 개수의 선택적 매개변수가 있으며 구문은 COALESCE(expr1, expr2, ..., exprn)입니다. 여기서 expr 1의 값이 NULL이 아니면 결과는 expr1이 되고, 그렇지 않으면 결과는 다음과 같습니다. NULL이 아닌 경우 expr2 등입니다. COALESCE는 중첩된 NVL 함수와 의미가 동일합니다.

COALESCE(expr1, expr2) = NVL(expr1, expr2)

COALESCE(expr1, expr2, expr3) = NVL(expr1,NVL(expr2, expr3))

NULL이 아닌 값이 발견된 경우 반환된 값의 데이터 유형은 NULL이 아닌 첫 번째 값의 데이터 유형과 동일합니다. 'ORA-00932: 불일치 데이터 유형' 오류를 방지하려면 NULL이 아닌 모든 매개변수가 NULL이 아닌 첫 번째 매개변수와 호환되어야 합니다. 세 가지 예를 살펴보겠습니다.

쿼리 1: 듀얼에서 coalesce(null, null, null, 'a string')을 선택합니다.

쿼리 2: 듀얼에서 coalesce(null, null, null)를 선택합니다.

쿼리 3: 듀얼에서 coalesce(substr('abc', 4), 'Not bc', 'No substring')을 선택합니다.

쿼리 1은 네 번째 매개변수인 문자열을 반환합니다. 이는 NULL이 아닌 첫 번째 매개변수이기 때문입니다. 모든 매개변수가 NULL이므로 쿼리 2는 NULL을 반환합니다. 쿼리 3은 첫 번째 매개변수를 평가하고 NULL 값을 가져온 다음 두 번째 매개변수가 NULL이 아닌 첫 번째 매개변수이므로 이를 반환합니다.

NVL 함수에 이미 익숙하다면 NVL2 함수 매개변수가 혼동될 수 있습니다. NVL(original, ifnull)은 값이 NULL이 아니면 원본을 반환하고, 그렇지 않으면 ifnull을 반환합니다. NVL2(original, ifnotnull, ifnull)는 원본이 NULL이 아니면 ifnotnull을 반환하고 그렇지 않으면 ifnull을 반환합니다. 혼란은 NVL 함수의 두 번째 매개변수가 ifnull인 반면 NVL2 함수는 ifnotnull이라는 사실에서 비롯됩니다. 따라서 함수에서 매개변수의 위치에 의존하지 마세요.

디코드 기능

DECODE 함수는 처음 두 매개변수가 같은지 테스트하고 같으면 세 번째 값을 반환하고 같지 않으면 다른 값을 반환하여 if-then-else 논리를 구현합니다. DECODE 함수에는 세 가지 필수 매개변수가 있으며 구문은 DECODE(expr1, comp1, iftrue1, , )입니다. 이러한 매개변수는 다음 의사코드 예제에 표시된 대로 사용됩니다.

expr1=comp1이면 iftrue1을 반환합니다.

그렇지 않으면 expr1=comp2이면 iftrue2를 반환합니다.

그렇지 않으면 exprN=compN이면 trueN을 반환합니다.

그렇지 않으면 NULL|iffalse를 반환합니다.

먼저 expr1을 comp1과 비교합니다. 동일하면 iftrue1이 반환됩니다. expr1이 comp1과 같지 않으면 다음에 일어나는 일은 comp2 및 iftrue2 매개변수가 지정되었는지 여부에 따라 달라집니다. 주어진 경우, expr1의 값은 comp2와 비교됩니다. 값이 동일하면 iftrue2가 반환됩니다. 그렇지 않은 경우 매개변수 compN, iftrueN 쌍이 있으면 expr1 및 compN을 비교하고 동일하면 iftrueN이 반환됩니다. 매개변수 집합에서 일치하는 항목이 발견되지 않으면 이 매개변수가 지정된 경우 false이거나 NULL이 반환됩니다.

DECODE 함수의 모든 매개변수는 표현식일 수 있습니다. 반환 값의 유형은 첫 번째 유효성 검사 요소(매개변수)의 유형과 동일합니다. 1. 표현식 expr 1은 암시적으로 comp 매개변수의 데이터 유형으로 변환됩니다.1. 기타 모든 사용 가능한 구성요소 매개변수 1...컴포넌트 또한 암시적으로 comp 유형으로 변환됩니다. 1. DECODE는 NULL 값을 다른 NULL 값과 동일하게 취급합니다. expr1이 NULL이고 comp3이 NULL이고 comp2가 NULL이 아니면 iftrue3이 반환됩니다. 몇 가지 예를 살펴보겠습니다.

쿼리 1: 듀얼에서 decode(1234, 123, '123 is a match')를 선택합니다.

쿼리 2: 듀얼에서 decode(1234, 123, '123은 일치', '일치 없음')을 선택합니다.

쿼리 3: 선택 decode('search', 'comp1', 'true1', 'comp2', 'true2', 'search', 'true3', substr('2search', 2, 6), 'true4', ' false') 이중에서;

쿼리 1은 값 1234와 123을 비교합니다. 두 값이 같지 않으므로 iftrue1은 무시되고 iffalse 값이 정의되지 않았으므로 NULL이 반환됩니다. 요청 2는 iffalse 값이 정의된다는 점을 제외하면 요청 1과 동일합니다. 1234는 123과 같지 않으므로 iffalse – '일치 없음'을 반환합니다. 3번째 질의는 매개변수 값이 검색값과 일치하는지 확인합니다. 매개변수 comp1 및 comp2는 'search'와 동일하지 않으므로 iftrue1 및 iftrue2의 결과를 건너뜁니다. 요소 comp3(매개변수 위치 6)의 세 번째 비교 연산에서 일치 항목이 발견되고 'true3'과 동일한 iftrue3(매개변수 7)의 값이 반환됩니다. 일치하는 항목이 발견되었으므로 더 이상 계산이 수행되지 않습니다. 즉, comp4(매개변수 8)의 값이 expr1과도 일치한다는 사실에도 불구하고 이전 비교에서 일치 항목이 발견되었으므로 이 표현식은 계산되지 않습니다.

CASE 표현

모든 3세대 및 4세대 프로그래밍 언어는 케이스 구성을 구현합니다. DECODE 함수와 마찬가지로 CASE 표현식을 사용하면 if-then-else 논리를 구현할 수 있습니다. CASE 표현식을 사용하는 데는 두 가지 옵션이 있습니다. 간단한 CASE 표현식은 한 번 비교할 소스 요소를 설정한 다음 필요한 모든 테스트 조건을 나열합니다. 복합(검색) CASE는 각 조건에 대해 두 명령문을 모두 평가합니다.

CASE 표현식에는 세 가지 필수 매개변수가 있습니다. 표현식 구문은 유형에 따라 다릅니다. 간단한 CASE 표현식의 경우 다음과 같습니다.

CASE 검색_expr

WHEN 비교_expr1 THEN iftrue1

)

TRUNC 함수는 소수점 m자리까지 잘린 숫자 n을 반환합니다. m 매개변수는 지정되지 않을 수 있습니다. 이 경우 n은 정수로 잘립니다.

SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

듀얼에서

함수 SIGN(n)

SIGN 함수는 숫자의 부호를 결정합니다. n이 양수이면 함수는 1을 반환합니다. n이 음수이면 -1을 반환합니다. 0과 같으면 0이 반환됩니다. 예:

SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3 선택

듀얼에서

이 함수의 흥미로운 특징은 0으로 나누는 오류를 일으키지 않고 m을 0과 동일하게 전송할 수 있다는 것입니다.

기능 POWER(n,m)

POWER 함수는 숫자 n을 m으로 거듭제곱합니다. 정도는 분수 및 음수가 될 수 있으며 이는 이 기능의 기능을 크게 확장합니다.

선택 전원(10, 2) X1, 전원(100, 1/2) X2,

힘(1000, 1/3) X3, 힘(1000, -1/3) X4

듀얼에서

X1 X2 X3 X4
100 10 10 0,1

어떤 경우에는 이 함수를 호출할 때 예외가 발생할 수 있습니다. 예를 들어:

전력 선택(-100, 1/2) X2

듀얼에서

이 경우 음수의 제곱근을 계산하려고 시도하면 ORA-01428 "Argument out of range" 오류가 발생합니다.

기능 SQRT(n)

이 기능 n의 제곱근을 반환합니다. 예를 들어:

SQRT(100) X 선택

듀얼에서

EXP(n) 및 LN(n) 함수

EXP 함수는 e의 n제곱을 증가시키고 LN 함수는 n의 자연 로그를 계산합니다(n은 0보다 커야 함). 예:

선택 EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

NVL 기능

NVL 함수는 일반적으로 가장 자주 사용됩니다. 이 함수는 NVL(expr1, expr2)라는 두 개의 매개변수를 받습니다. 첫 번째 매개변수 expr1이 NULL이 아니면 함수는 해당 값을 반환합니다. 첫 번째 매개변수가 NULL이면 함수는 대신 두 번째 매개변수 expr2의 값을 반환합니다.

실제적인 예를 살펴보겠습니다. EMP 테이블의 COMM 필드에는 NULL 값이 포함될 수 있습니다. 다음과 같은 쿼리를 실행할 때:

EMPNO, ENAME, COMM, NVL(COMM, 0) NVL_COMM 선택

SCOTT.EMP에서

NULL 값은 0으로 대체됩니다. 함수를 사용하여 값이 생성되면 별칭이 할당됩니다. 쿼리 결과는 다음과 같습니다.

엠프노 ENAME COMM NVL_COMM
7369 스미스 0
7499 알렌 300 300
7521 500 500
7566 존스 0
7654 남자 이름 1400 1400
7698 블레이크 0
7782 클락 0
7839 0
7844 돌리는 사람 0 0
7900 제임스 0
7902 포드 0
7934 밀러 0

기능 CEIL(n)

CEIL 함수는 매개변수로 전달된 숫자 n보다 크거나 같은 가장 작은 정수를 반환합니다. 예를 들어:

CEIL(100) X1, CEIL(-100) X2, CEIL(100.2) X3 , CEIL(-100.2) X4 선택

듀얼에서

기능 TRUNC(n [,m])

TRUNC 함수는 소수점 m자리까지 잘린 숫자 n을 반환합니다. m 매개변수는 지정되지 않을 수 있습니다. 이 경우 n은 정수로 잘립니다.

SELECT TRUNC(100.25678) X1, TRUNC(-100.25678) X2, TRUNC(100.99) X3,

TRUNC(100.25678, 2) X4

듀얼에서

함수 SIGN(n)

SIGN 함수는 숫자의 부호를 결정합니다. n이 양수이면 함수는 1을 반환합니다. n이 음수이면 -1을 반환합니다. 0과 같으면 0이 반환됩니다. 예:

SIGN(100.22) X1, SIGN(-100.22) X2, SIGN(0) X3 선택

듀얼에서

이 함수의 흥미로운 특징은 0으로 나누는 오류를 일으키지 않고 m을 0과 동일하게 전송할 수 있다는 것입니다.

기능 POWER(n,m)

POWER 함수는 숫자 n을 m으로 거듭제곱합니다. 정도는 분수 및 음수가 될 수 있으며 이는 이 기능의 기능을 크게 확장합니다.

선택 전원(10, 2) X1, 전원(100, 1/2) X2,

힘(1000, 1/3) X3, 힘(1000, -1/3) X4

듀얼에서

X1 X2 X3 X4
100 10 10 0,1

어떤 경우에는 이 함수를 호출할 때 예외가 발생할 수 있습니다. 예를 들어:

전력 선택(-100, 1/2) X2

듀얼에서

이 경우 음수의 제곱근을 계산하려고 시도하면 ORA-01428 "Argument out of range" 오류가 발생합니다.

기능 SQRT(n)

이 함수는 숫자 n의 제곱근을 반환합니다. 예를 들어:

SQRT(100) X 선택

듀얼에서

EXP(n) 및 LN(n) 함수

EXP 함수는 e의 n제곱을 증가시키고 LN 함수는 n의 자연 로그를 계산합니다(n은 0보다 커야 함). 예:

선택 EXP(2) X1, LN(1) X2, LN(EXP(2)) X3

숫자가 포함된 TO_CHAR 함수

데이터를 다른 데이터 유형으로 변환하는 함수입니다. TO_CHAR(number)는 숫자를 텍스트로 변환합니다. TO_NUMBER(문자열)은 텍스트를 숫자로 변환합니다.

SELECT TO_CHAR (123) FROM DUAL은 문자열 123을 반환하고, SELECT TO_NUMBER (`12345") FROM DUAL은 숫자 12345를 반환합니다.

실험실 작업. 출력 숫자 형식 변경

숫자 값 작업을 위한 TO_CHAR 함수인 Oracle SQL의 숫자 값 형식이 변경되었습니다.

운동:

hr.employees 테이블에 있는 직원의 이름, 성, 급여에 대한 정보를 그림 1과 같은 형식으로 표시하는 쿼리를 작성하세요. 3.4-1:

쌀. 3.4 -1

이 경우 급여가 가장 높은 직원의 행이 먼저 표시되도록 데이터를 정렬해야 합니다.

메모:

그림의 일부 급여 값. 3.4-1은 수정되었으므로 귀하의 값과 동일하지 않을 수 있습니다.

해결책:

SELECT first_name AS "이름", last_name "성", TO_CHAR (SALARY, "L999999999.99") "Salary" FROM hr.employees ORDER BY SALARY DESC.

TO_NUMBER 및 TO_DATE 함수

문자열을 날짜 TO_DATE(문자열, 형식)로 변환하는 함수입니다. 가능한 형식 값은 위에서 이미 논의되었으므로 이 기능을 사용하는 몇 가지 예를 제시하겠습니다. 예:

선택하다 TO_DATE("2010년 1월 1일", `DD.MM.YYYY") 에서 DUAL은 `01/01/2010" 날짜를 반환합니다.

선택하다 TO_DATE("2010년 1월 1일", `DD.MON.YYYY") 에서 DUAL은 `01/01/2009" 날짜를 반환합니다.

선택하다 TO_DATE("15-01-10", `DD-MM-YY") 에서 DUAL은 `01/15/2010" 날짜를 반환합니다.

문자열을 숫자 값 TO_NUMBER(문자열, 형식)로 변환하는 함수입니다. 가장 일반적인 형식 값이 표에 나열되어 있으므로 예를 사용하여 이 기능의 사용을 살펴보겠습니다. 예:

선택하다 TO_NUMBER(`100") 에서 DUAL은 숫자 100을 반환합니다. SELECT TO_NUMBER (`0010.01", "9999D99") 에서 DUAL은 숫자 10.01을 반환합니다.

선택하다 TO_NUMBER("500,000", "999G999") 에서 DUAL은 숫자 500000을 반환합니다.

날짜 형식의 RR 요소

RR 날짜/시간 형식 요소는 YY 날짜/시간 형식 요소와 유사하지만 다른 세기의 날짜 값을 저장할 수 있는 추가적인 유연성을 제공합니다. RR 날짜/시간 형식 요소를 사용하면 연도의 마지막 두 자리만 지정하여 20세기 날짜를 21세기에 저장할 수 있습니다.

현재 연도의 마지막 두 자리가 00부터 49까지인 경우 반환된 연도는 현재 연도와 처음 두 자리가 동일합니다.

현재 연도의 마지막 두 자리가 50에서 99 사이인 경우 반환되는 연도의 처음 두 자리는 현재 연도의 처음 두 자리보다 1이 큽니다.

현재 연도의 마지막 두 자리가 00~49인 경우 반환되는 연도의 처음 두 자리는 현재 연도의 처음 두 자리보다 1이 적습니다.

현재 연도의 마지막 두 자리가 50에서 99 사이인 경우 반환된 연도는 현재 연도와 처음 두 자리가 동일합니다.

NVL 기능

NVL 함수는 일반적으로 가장 자주 사용됩니다. 이 함수는 NVL(expr1, expr2)이라는 두 개의 매개변수를 받습니다. 첫 번째 매개변수 expr1이 NULL이 아니면 함수는 해당 값을 반환합니다. 첫 번째 매개변수가 NULL이면 함수는 대신 두 번째 매개변수 expr2의 값을 반환합니다.

예: 공급업체에서 NVL(supplier_city, n/a")을 선택합니다.

위의 SQL 문은 공급자_도시 필드에 null 값이 포함되어 있으면 n/"을 반환합니다. 그렇지 않으면 공급자_도시 값을 반환합니다.

Oracle/PLSQL에서 NVL 함수를 사용하는 또 다른 예는 다음과 같습니다.

공급자 중에서 공급자_id, NVL(supplier_desc, 공급자_이름)을 선택합니다.

이 SQL 문은 다음을 반환합니다. 공급 업체 이름필드의 경우 공급자_설명 null 값이 포함되어 있습니다. 그렇지 않으면 반환됩니다 공급자_설명.

마지막 예: Oracle/PLSQL에서 NVL 함수를 사용하는 방법은 다음과 같습니다. sales에서 NVL(commission, 0)을 선택합니다.

이 SQL 문은 다음과 같은 경우 값 0을 반환했습니다. 수수료필드에 null 값이 포함되어 있습니다. 그렇지 않으면 반환됩니다. 커미션필드.

다양한 데이터 유형에 대한 NVL 변환

null 값을 실제 값으로 변환하려면 NVL 함수를 사용하세요. NVL( 표현식1, 표현식2), 어디:

식1-정의되지 않은 원래 값 또는 계산된 값입니다.

표현식2- 정의되지 않은 값을 대체하는 값입니다.

메모: NVL 함수를 사용하여 모든 데이터 유형을 변환할 수 있지만 결과는 항상 다음과 동일한 유형입니다. 표현1.

NVL 변환 대상 다양한 방식:

번호 - NVL (숫자 열, 9).

CHAR 또는 VARCHAR2 - NVL (문자|열,"사용 불가").

실험실 작업. NVL 기능 사용

Oracle SQL에서 null 값으로 작업하기 위한 NVL 함수입니다.

운동:

hr.employees.테이블에 있는 직원의 성과 이름 정보와 해당 직원의 커미션 비율(COMMISSION_PCT 열)을 표시하는 쿼리를 작성하세요. 이 경우 커미션이 정의되지 않은 직원에 대해서는 값이 0으로 표시되어야 하며 요청 결과는 그림 3과 같아야 합니다. 3.5-1.

쌀. 3.5 -1 (51행부터 표시되는 값)

해결책:

해당 요청 코드는 다음과 같을 수 있습니다.

SELECT first_name AS "이름", last_name을 "성"으로, NVL(COMMISSION_PCT, 0)을 "수수료율" FROM hr.employees로 선택합니다.




맨 위