Bonjour,
je souhaiterais récupérer avec une seule requête toutes les lignes d'une table nommée TTAB_REMBOURS_BCE_CV2_LDR dont le champ BCE_DT_ECHEANCE_LDR (qui est un varchar2(8)) ne correspond pas au format date 'YYYYMMDD'
Bonjour,
je souhaiterais récupérer avec une seule requête toutes les lignes d'une table nommée TTAB_REMBOURS_BCE_CV2_LDR dont le champ BCE_DT_ECHEANCE_LDR (qui est un varchar2(8)) ne correspond pas au format date 'YYYYMMDD'
quelle est ta version?
tu peux déjà tenter
bon, si tu as des 31 février, il te faudra sans doute une autre approche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select * from TTAB_REMBOURS_BCE_CV2_LDR where length(BCE_DT_ECHEANCE_LDR ) != 8 or ltrim(BCE_DT_ECHEANCE_LDR,'0123456789') is not null
Je suis sur une base 9.2.0.8
J'avais pensé au lentgh mais pas au ltrim.
Avant je bouclais sur les données de ma table et je faisais le teste suivant:
Mais vu que j'ai plusieurs millions de lignes dans ma table en terme de perf c'était pas terrible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 BEGIN SELECT TO_DATE(CUR_TAB_RMB_REC.BCE_DT_ECHEANCE_LDR,cstFormatDate) into v_dt_test FROM DUAL; EXCEPTION WHEN OTHERS THEN PCK_ANOMALIE.pInsertAnomalieTabAmo( PCK_ANOMALIE.rejTRmbDtEchFrmIncorr, CUR_TAB_RMB_REC.id_genere, CUR_TAB_RMB_REC.BCE_DT_ECHEANCE_LDR ); v_nb_TAmoDtEchFrmIncorr := v_nb_TAmoDtEchFrmIncorr + 1; v_continuer := FALSE; END;
merci en tout cas
Fais une fonction qui renvoie 1 ou 0
Ensuite ta requete:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 FUNCTION F_VERIF (p_entree IN VARCHAR2) RETURN NUMBER IS v_date DATE; BEGIN v_date := TO_DATE(p_entree, 'YYYYMMDD'); RETURN 1; EXCEPTION WHEN OTHERS THEN RETURN 0; END;
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT * FROM TATABLE WHERE F_VERIF(tonchamp) = 0
GENIALISSIME
Je viens de tester ça marche super.
La requête s'execute en 1minute et 36 secondes pour 10 millions de lignes.
Merci
![]()
Partager