Newsgroup: it.comp.software.database
Titolo: confronto data

oracle 9i
devo fare una select che mi tiri fuori tutti gli eventi che si sono
verificati in un determinato periodo di tempo. La persona che gestisce
il db ha messo il campo data_evento come char, quindi quando tento di
fare la select mi tira dati che non rispettano le mie attese :-(
ho provato così:
WHERE (TO_DATE(data_aprt_problema,'dd-Mon-yy')) >= '27-Feb-02' 
AND (TO_DATE(data_aprt_problema,'dd-Mon-yy')) <= '10-Oct-02' 
mi da come errore :ORA-01843: not a valid month
grazie dell'aiuto

 grazie dell'aiuto
Imparata da poco, ma su Access... forse va bene anche a te, meglio cosě ?:
"mm/dd/yyyy"
--
Gulp ! Forse mi sono perso qualcosa !

 "mm/dd/yyyy"
in teoria la funzione dovrebbe converite la stringa data_aprt_problema nel
formato che gli viene indicato,
cmq la soluzione che hai postato nn funziona


ciao, credo che l'errore sia dovuto al fatto che gli passi da confontare
la data come una stringa. La funzione TO_DATE ti trasforma il campo in
formato data e quindi puoi fare confronti solo con altri campi data.
per es:
WHERE (TO_DATE(data_aprt_problema,'dd-Mon-yy')) >= sysdate -20

 ha scritto nel messaggio
news:b3v8b5$39j$1...@lacerta.tiscalinet.it...

continua a dare lo stesso errore, ho provato con questa semplice query:
select data_aprt_problema from fb_interventi WHERE
(TO_DATE(data_aprt_problema,'dd-Mon-yy')) >= sysdate -20
                                                            *
ERROR at line 1:


 ORA-01843: not a valid month
mhhhh... mi dici cosa restituisce
select data_aprt_problema from ...

 ha scritto nel messaggio
news:b3va50$4el$1...@lacerta.tiscalinet.it...

a me serve che la query mi restituisca degli eventi che si sono verificati
durante un intervallo di tempo, e data_aprt_problema è formattata in questo
modo dd-Mon-yy

 formattata in questo modo dd-Mon-yy
mhhh... sempre piu' strano...
Io ho lo stesso identico scenario: un campo char che contiene una
data:
SQL> select f_start_time from tabella where rownum < 2;
  F_START_TIME
-------------------
01/03/1993 01:01:50
SQL> select f_start_time from tabella
    where colonna = xxxxxx and to_date(f_start_time,'dd/mm/yy hh24:mi:ss') > sysdate -6;
F_START_TIME
-------------------
25/02/2003 12:00:24
Se invece ''sbaglio'' passando il formato della data l'errore e' lo
stesso che ricevi tu.
SQL> select f_start_time from tabella
  2   where colonna = xxxxxx and to_date(f_start_time,'dd-Mon-yy') > sysdate -6;
                                        *
ERROR at line 2:
ORA-01843: not a valid month
Mi pare strano che il problema _non_ sia nel formato con cui
viene passata la data alla funzione to_date. Prova su 
comp.databases.oracle.misc e comp.databases.oracle.server

 > verificati durante un intervallo di tempo, e data_aprt_problema č

data_aprt_problema
-----------------------
27-Feb-03
il campo č costruito cosě char(10) provo la tua istruzione

 il campo è costruito così char(10) provo la tua istruzione
 
Ho provato a duplicare il tuo scenario:
SQL>  create table da_rimuovere as select to_char(sysdate) data from dual;
Table created.
SQL> desc da_rimuovere
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DATA                                               VARCHAR2(9)
SQL> select * from da_rimuovere;
DATA
---------
03-MAR-03
SQL> select to_date(data,'dd-Mon-yy') from da_rimuovere;
TO_DATE(D
---------
03-MAR-03
la funzione restituisce corretamente il campo data. Mi sorge però un
dubbio: per contenere la data in quel formato bastano 9 caratteri: non 
vorrei che il rimanente (il decimo) fosse considerato facente parte della
data. Prova con un select to_date(substr(data_aprt_problema,1,9),'dd-Mon-yy') from ..
per eliminare l'eventuale 10mo carattere

 per eliminare l'eventuale 10mo carattere
questa non funziona

 questa non funziona
Che errore ti restituisce??
A proposito usi qualche tool o semplicemente sqlplus?
Ho fatto un giretto su metalink e i casi in cui si può verificare
l'errore usando tool con parametri di configurazione (tipicamente NLS)
settati in modo non uniforme al server, sono parecchi.
Se usi un tool, ma hai la possibilità di loggarti direttamente via
sqlplus ti consiglio di fare le stesse prove da una sessione sqlplus e 
vedere se l'errore compare ancora.
fammi sapere ciao

 ha scritto nel messaggio
news:b3vi65$a81$1...@lacerta.tiscalinet.it...

ORA-01843: not a valid month, mi loggo direttamente con sqlplus e si mi dici
il comando posso vedere come sono impostati i parametri per la gestione
della data
grazie per l'aiuto

 grazie per l'aiuto
 
Per sapere che parametri sono configurati devi interrogare:
nls_database_parameters, nls_instance_parameters e
nls_session_parameters.
Poco fa mi e' sorto un dubbio e ho fatto una prova: 
SQL> insert into da_rimuovere values ('26-Mag-03');
1 row created.
SQL>  select to_date(data,'dd-Mon-yy') from da_rimuovere;
ERROR:
ORA-01843: not a valid month
capito?? se i valori sono stati inseriti con le abbreviazioni dei mesi in
italiano e oracle cerca con le relative abbreviazioni in inglese
allora ho un altro contesto in cui ricevo l'errore 08143.
Se cosi' stanno le cose dovrai sostituire ogni occorrenza delle
abbreviazioni in italiano con le rispettive anglosassoni!!!

 ha scritto nel messaggio
news:b3vop1$dtk$1...@lacerta.tiscalinet.it...

le abbreviazione sono inserite nella versione anglosassone

 le abbreviazione sono inserite nella versione anglosassone
 
GULP!!! non so piu' cosa pensare. L'unica spiegazione plausibile che mi
viene in mente e' che ci siano dei dati ''sporchi'' in quella colonna,
per cui  viene generato quell'errore. Magari esiste uno spazio
all'inizio  o alla fine o forse in qualche record il campo non e'
valorizzato....a questo punto posso solo fare congetture.
questo lo puoi verificare usando substr nelle varie combinazioni:
select substr(data_aprt_problema,4,3) from ..
select substr(data_aprt_problema,1,2) from ...
select substr(data_aprt_problema,7,3) from....
non dirmi che ottieni errori perche' allora sto impazzendo :-)
caso mai restringi il range di ricerca con rownum.
auguri ciao

 auguri ciao

> auguri ciao
 
ma che fai, mi prendi in giro??  ;-)
Certo che ti danno lo stesso numero di records. Io intendevo sapere COSA
ti restituiscono: e' chiaro che se cosi' la query non da errori allora il
problema e' nel formato di quei dati.
Sapendo cosa restituiscono le tre query di prima si poteva cercare almeno
di capire se esiste qualche carattere 'inutile' che manda in errore la
funzione to_date.

 ha scritto nel messaggio
news:b400cp$jd9$1...@lacerta.tiscalinet.it...

il rislutato erano:
select substr(data_aprt_problema,4,3) from .. (le 3 lettere del mese)
select substr(data_aprt_problema,1,2) from ...(i 2 caratteri del giorno)
select substr(data_aprt_problema,7,3) from....(usando 8,3 i due caratteri
del mese)

alter session set nls_territory italy;
...
WHERE (TO_DATE(data_aprt_problema,'dd-Mon-yy')) >= '27-Feb-02'
AND (TO_DATE(data_aprt_problema,'dd-Mon-yy')) <= '10-Ott-02'
...
...funziona?