ORA-01841 where 절의 날짜에 조건을 적용 할 때 오류가 발생했습니다.

마킹 .SC

고객을 위해 만료 된 신용 카드 데이터를 선택해야합니다. 아시다시피 카드의 만료 날짜는 MM 형식의 월과 YY 형식의 연도 만 사용합니다. 내 데이터베이스에서 모든 만료 날짜는 MMYY 형식으로 저장되므로 TO_DATE (FONDOS.VENCTARJETA, 'MMYY')를 사용하여 날짜를 얻은 다음 몇 가지 조건을 적용합니다.

이것은 내 쿼리입니다.

SELECT 
    TO_DATE(FONDOS.VENCTARJETA, 'MMYY') AS F_VENCIMIENTO
FROM 
    POLIZA POLIZA,
    DATOS_FONDOSPOL FONDOS
WHERE
    POLIZA.IDEPOL = FONDOS.IDEPOL AND
    --TO_DATE(FONDOS.VENCTARJETA, 'MMYY') <= SYSDATE AND
    POLIZA.CODINTER = TO_NUMBER(:P2_CLAVE)

이것은 다음과 같은 89 개의 행을 반환합니다.

F_VENCIMIENTO      |
-------------------|
                   |
2023-08-01 00:00:00|
2020-08-01 00:00:00|
2021-11-01 00:00:00|
2020-09-01 00:00:00|
                   |
2023-02-01 00:00:00|
---- many more ----

결과를 통해 'MMYY'날짜를 날짜 유형 열로 변환 할 때 오류가 없음을 알 수 있습니다.

보시다시피 where 절에 조건을 주석 처리 한 다음 줄의 주석 처리를 제거하면 다음과 같이 표시됩니다.

ORA-01841 : (전체) 연도는 -4713에서 +9999 사이 여야하며 0이 아니어야합니다.

이 오류가 발생하는 유일한 동작은 아니지만 이것이 어떻게 실패하는지 보여줄 수있는 가장 간단한 동작입니다.

논리가 없어 왜 그런지 알 수 없습니다. 도와주세요. 감사.

앤드류 세 이어

필터 조건은 오라클이 최선이라고 결정한 순서대로 실행할 수 있습니다. 특정 형식 마스크를 사용하여 날짜로 제대로 변환되지 않지만 조인 조건에 의해 필터링되는 일부 행이 테이블에 있음을 나타냅니다. 필터를 포함하면 Oracle은 datos_fondospol다른 테이블에 조인하기 전에 테이블에서 사전 필터링 할 수 있다는 것을 알 수 있으며 ,이 시점에서 모든 행이 함수에 도달합니다.

Oracle 버전 12.2 이상을 사용하는 경우 다음을 사용하여 해당 형식 마스크를 사용하여 날짜로 변환 할 수없는 데이터를 포함하는 모든 행을 식별 할 수 있습니다 validate_conversion.

select 
from   datos_fondospol 
where  validate_conversion(venctarjeta as date, 'MMYY') = 0

이 데이터가 정확하지만 무시해도 안전하다면 다른 12.2 추가를 사용할 수 있습니다.

SELECT 
    TO_DATE(FONDOS.VENCTARJETA, 'MMYY') AS F_VENCIMIENTO
FROM 
    POLIZA POLIZA,
    DATOS_FONDOSPOL FONDOS
WHERE
    POLIZA.IDEPOL = FONDOS.IDEPOL AND
    TO_DATE(FONDOS.VENCTARJETA default null on conversion error, 'MMYY') <= SYSDATE AND
    POLIZA.CODINTER = TO_NUMBER(:P2_CLAVE)

12.1에만있는 경우 with plsql절을 사용하여 유사한 기능을 직접 만들 수 있습니다 .

with 
 function default_date(dateString varchar2,dateFormat varchar2)
 return date
 is
   convertedDate  date;
 begin
   convertedDate := to_date(dateString,dateFormat );
   return convertedDate ;
 exception when others then
   return null;
 end;
SELECT 
    TO_DATE(FONDOS.VENCTARJETA, 'MMYY') AS F_VENCIMIENTO
FROM 
    POLIZA POLIZA,
    DATOS_FONDOSPOL FONDOS
WHERE
    POLIZA.IDEPOL = FONDOS.IDEPOL AND
    default_date(FONDOS.VENCTARJETA, 'MMYY') <= SYSDATE AND
    POLIZA.CODINTER = TO_NUMBER(:P2_CLAVE)

그보다 적은 경우 PL / SQL 함수를 명시 적으로 만들고 호출 할 수 있습니다. 또는 case먼저 문자열의 내용을 확인 하는 표현식을 만들 수 있습니다.

SELECT 
    TO_DATE(FONDOS.VENCTARJETA, 'MMYY') AS F_VENCIMIENTO
FROM 
    POLIZA POLIZA,
    DATOS_FONDOSPOL FONDOS
WHERE
    POLIZA.IDEPOL = FONDOS.IDEPOL AND
    case when regexp_like (FONDOS.VENCTARJETA, '^[0-9]{4}$')
 and to_number(substr(FONDOS.VENCTARJETA,1,2)) between 1 and 12  
 then to_date(FONDOS.VENCTARJETA, 'MMYY') else cast(null as date) end <= SYSDATE AND
    POLIZA.CODINTER = TO_NUMBER(:P2_CLAVE)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

mysql에서 3 개의 테이블로 내부 조인을 사용할 때 오류가 발생했습니다.

분류에서Dev

Windows Form의 ElementHost에 WPF 사용자 정의 컨트롤을 추가 할 때 오류가 발생했습니다.

분류에서Dev

params dynamic []의 내용을 합할 때 오류가 발생했습니다.

분류에서Dev

정의되지 않은 속성 :> Laravel에서 날짜 유형 열을 사용할 때 stdClass 오류가 발생했습니다. 어떻게 해결할 수 있습니까?

분류에서Dev

조건 내에서 MAX 값을 계산할 때 오류가 발생했습니다.

분류에서Dev

Lumia 520에서 MyToolkit을 사용하여 YouTube를 재생할 때 오류가 발생했습니다.

분류에서Dev

angularjs 모듈의 참조에 $ state 서비스를 추가 할 때 오류가 발생했습니다.

분류에서Dev

C의 for 루프에서 구조체 포인터를 사용할 때 일부 분할 오류가 발생했습니다.

분류에서Dev

C의 for 루프에서 구조체 포인터를 사용할 때 일부 분할 오류가 발생했습니다.

분류에서Dev

ORA : 00907 : WHERE 절에서 CASE를 사용할 때 오른쪽 괄호가 없습니다.

분류에서Dev

목록의 54 줄에서 sudo apt-get update를 사용할 때 오류가 발생했습니다.

분류에서Dev

?를 사용할 때 구문 오류가 발생했습니다. C # (. net 4.6)의 속성 이름 끝에

분류에서Dev

ORA-00904 매개 변수가있는 쿼리에 'MERGE INTO'를 사용할 때 'invalide indentifier'오류가 발생했습니다.

분류에서Dev

ftp_nb_fput을 사용하여 ftp에 파일을 업로드 할 때 오류가 발생했습니다.

분류에서Dev

ftp_nb_fput을 사용하여 ftp에 파일을 업로드 할 때 오류가 발생했습니다.

분류에서Dev

목록에서 임의의 항목을 제거 할 때 오류가 발생했습니다.

분류에서Dev

junit mockito에서 Optional.of를 사용할 때 찾을 수 없음 오류가 발생했습니다.

분류에서Dev

Eclipse에서 Java 응용 프로그램을 시작할 때 오류가 발생했습니다.

분류에서Dev

document.getElementById를 사용하여 JavaScript 출력을 화면에 표시 할 때 오류가 발생했습니다.

분류에서Dev

Vue.js에서 V-IF 속성을 사용할 때 오류가 발생했습니다.

분류에서Dev

Unpickling 후 Latent Dirichlet Allocation에서 변환 방법을 사용할 때 오류가 발생했습니다.

분류에서Dev

div 태그의 HTML에 자바 스크립트를 사용하여 UL을 추가 할 때 오류가 발생했습니다.

분류에서Dev

내 models.py에서 fieldname의 이름을 바꾸려고 할 때 오류가 발생했습니다.

분류에서Dev

C #의 UInt16에서 비트 NOT (~)을 수행하려고 할 때 오류가 발생했습니다.

분류에서Dev

하나의 그림에서 두 곡선을 플롯 할 때 오류가 발생했습니다 (python-pandas-matplotlib).

분류에서Dev

C에서 이중 변수의 최대 값을 계산할 때 오류가 발생했습니다.

분류에서Dev

JFrame을 통해 ArrayList에 추가 할 때 NullPointerException 오류가 발생했습니다.

분류에서Dev

guzzle을 사용할 때 500 오류가 발생했지만 curl에서는 오류가 발생하지 않습니다.

분류에서Dev

mysql DATE_FORMAT을 사용할 때 구문 오류가 발생했습니다.

Related 관련 기사

  1. 1

    mysql에서 3 개의 테이블로 내부 조인을 사용할 때 오류가 발생했습니다.

  2. 2

    Windows Form의 ElementHost에 WPF 사용자 정의 컨트롤을 추가 할 때 오류가 발생했습니다.

  3. 3

    params dynamic []의 내용을 합할 때 오류가 발생했습니다.

  4. 4

    정의되지 않은 속성 :> Laravel에서 날짜 유형 열을 사용할 때 stdClass 오류가 발생했습니다. 어떻게 해결할 수 있습니까?

  5. 5

    조건 내에서 MAX 값을 계산할 때 오류가 발생했습니다.

  6. 6

    Lumia 520에서 MyToolkit을 사용하여 YouTube를 재생할 때 오류가 발생했습니다.

  7. 7

    angularjs 모듈의 참조에 $ state 서비스를 추가 할 때 오류가 발생했습니다.

  8. 8

    C의 for 루프에서 구조체 포인터를 사용할 때 일부 분할 오류가 발생했습니다.

  9. 9

    C의 for 루프에서 구조체 포인터를 사용할 때 일부 분할 오류가 발생했습니다.

  10. 10

    ORA : 00907 : WHERE 절에서 CASE를 사용할 때 오른쪽 괄호가 없습니다.

  11. 11

    목록의 54 줄에서 sudo apt-get update를 사용할 때 오류가 발생했습니다.

  12. 12

    ?를 사용할 때 구문 오류가 발생했습니다. C # (. net 4.6)의 속성 이름 끝에

  13. 13

    ORA-00904 매개 변수가있는 쿼리에 'MERGE INTO'를 사용할 때 'invalide indentifier'오류가 발생했습니다.

  14. 14

    ftp_nb_fput을 사용하여 ftp에 파일을 업로드 할 때 오류가 발생했습니다.

  15. 15

    ftp_nb_fput을 사용하여 ftp에 파일을 업로드 할 때 오류가 발생했습니다.

  16. 16

    목록에서 임의의 항목을 제거 할 때 오류가 발생했습니다.

  17. 17

    junit mockito에서 Optional.of를 사용할 때 찾을 수 없음 오류가 발생했습니다.

  18. 18

    Eclipse에서 Java 응용 프로그램을 시작할 때 오류가 발생했습니다.

  19. 19

    document.getElementById를 사용하여 JavaScript 출력을 화면에 표시 할 때 오류가 발생했습니다.

  20. 20

    Vue.js에서 V-IF 속성을 사용할 때 오류가 발생했습니다.

  21. 21

    Unpickling 후 Latent Dirichlet Allocation에서 변환 방법을 사용할 때 오류가 발생했습니다.

  22. 22

    div 태그의 HTML에 자바 스크립트를 사용하여 UL을 추가 할 때 오류가 발생했습니다.

  23. 23

    내 models.py에서 fieldname의 이름을 바꾸려고 할 때 오류가 발생했습니다.

  24. 24

    C #의 UInt16에서 비트 NOT (~)을 수행하려고 할 때 오류가 발생했습니다.

  25. 25

    하나의 그림에서 두 곡선을 플롯 할 때 오류가 발생했습니다 (python-pandas-matplotlib).

  26. 26

    C에서 이중 변수의 최대 값을 계산할 때 오류가 발생했습니다.

  27. 27

    JFrame을 통해 ArrayList에 추가 할 때 NullPointerException 오류가 발생했습니다.

  28. 28

    guzzle을 사용할 때 500 오류가 발생했지만 curl에서는 오류가 발생하지 않습니다.

  29. 29

    mysql DATE_FORMAT을 사용할 때 구문 오류가 발생했습니다.

뜨겁다태그

보관