Avatar billede william_munny Nybegynder
09. december 2005 - 12:04 Der er 13 kommentarer og
1 løsning

Konverter tekststreng til nummer

Hej eksperter,
Jeg skal importere noget data fra en Access db til en Oracle XE, Jeg har eksporteret til en csv fil. og prøver nu at importere denne. Når jeg sætter en tal kolonne ind fra csv filen brokker den sig i SQL:
ORA-01722: invalid number
Jeg har prøvet at bruge funktionen "to_number(VALUE,'9G999D99')" men jeg kan ikke få det til at spille.
Jeg bruger komma som decimal seperator.
Avatar billede pgroen Nybegynder
09. december 2005 - 14:06 #1
Forslag:
Ved problemer af den art kan det af og til være lettere at finde fejlen ved at importere til en varchar2, og derefter at prøve at konvertere til en number...
Avatar billede william_munny Nybegynder
09. december 2005 - 15:59 #2
Det er faktisk præcist det jeg har gjort, desværre brokker den sig stadig.
Avatar billede Slettet bruger
09. december 2005 - 19:04 #3
Hvis vi gætter på at du har importeret data til en tabel 'T' og dit felt hedder 'VALUE', skulle du kunne konvertere med TO_NUMBER. Måske skal du angive, hvilket tegn du bruger som decimaltegn (,) og gruppeseparator (.):

select TO_NUMBER(VALUE,'9G999D99',' NLS_NUMERIC_CHARACTERS = '',.''')
from T;
Avatar billede pgroen Nybegynder
12. december 2005 - 09:06 #4
For at overbevise dig selv om, at alle dine værdier har det format du forventer, kunne du evt. prøve noget i denne stil:

SELECT translate (value, '0123456789', '9999999999') s, COUNT (*)
  FROM t
GROUP BY translate (value, '0123456789', '9999999999');
Avatar billede william_munny Nybegynder
12. december 2005 - 10:25 #5
Jeg får følgende resultat
S    COUNT(*)
99        89
99,999        14
9,99        406
9,9999        59
99,9        6
999,999        238
9,999        596
999        997
99,9999        99
9999,9        151
9999,999    118
99,99        9
999,9999    1
9999    67
999,9    181
999,99    275
9999,99    62
999999    1
9    46
9,9    30
Avatar billede pgroen Nybegynder
12. december 2005 - 10:35 #6
Aha, du har op til 4 decimaler efter kommaet, så dit format skal være noget i stil med:

to_number(VALUE,'9G999D9999')
Avatar billede william_munny Nybegynder
12. december 2005 - 10:40 #7
Jeg ændrede lidt på formatet i Excel inden jeg importerede og har nu
S    COUNT(*)
9,9999          1137
99,9999            217
999,9999    1692
999999,9999    1
9999,9999    398

Hvis jeg prøver to_number(VALUE,'9G999D9999') får jeg en  ORA-01722: invalid number min SQL ser således ud

SELECT to_number(CALCVALUE,'9G999D9999')
FROM REPLICA_TEMP;

Kan det være nogle regional settings ?
Avatar billede pgroen Nybegynder
12. december 2005 - 10:45 #8
virker det med

  to_number(VALUE,'999999D9999') ?

eller simpelthen

  to_number(value) ?
Avatar billede william_munny Nybegynder
12. december 2005 - 11:28 #9
Det her virker.
select TO_NUMBER(CALCVALUE,'999999D9999',' NLS_NUMERIC_CHARACTERS = '',.''')as vals
from REPLICA_TEMP;
Men jeg kan ikke
insert into REPLICA(REPLICAID,REPLICANAME,EXPERIMENTID,EXCLUDED,
NOTE,VALUE) SELECT REPLICAID,REPLICANAME,EXPERIMENTID, EXCLUDED,NOTE, TO_NUMBER(CALCVALUE,'999999D9999',' NLS_NUMERIC_CHARACTERS = '',.''') FROM REPLICA_TEMP;
??
Avatar billede pgroen Nybegynder
12. december 2005 - 11:32 #10
Hvilken datatype er temp.value ?

og hvad er fejlmeddelelsen ?
Avatar billede william_munny Nybegynder
12. december 2005 - 11:43 #11
VALUE er af typen NUMBER (Destination)
CALCVALUE er en VARCHAR2 (Temp table)

fejlen er

ORA-01722: invalid number
Avatar billede pgroen Nybegynder
12. december 2005 - 12:00 #12
Øhh, er du HELT sikker på, at det stadig er 'value' kolonnen der er problemet ?
Avatar billede william_munny Nybegynder
12. december 2005 - 12:05 #13
Nej jeg tjekker lige
Avatar billede william_munny Nybegynder
12. december 2005 - 12:31 #14
Øhh Mandag morgen... :-) Det virker nu nice tak for Hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester