Zum Inhalt springen

Funktion to_number


simsalabim

Empfohlene Beiträge

Hallo,

ich habe ein kleines Problem, und finde dazu im Netz leider keine passende Lösung.

Also ich habe eine Tabelle, die enthält 5 Attribute.

alle attribute sind im Format VARCHAR2(2000 BYTE).

Achso, es handelt sich um eine Oracle Datenbank.

In dieser Tabelle gibt es ein Feld Menge, welöches mit Werten wiefolgt gefüllt ist:

Beispiel:

9999.000

9.916

Diese Werte sollen jetzt in ein andere Tabelle gesinserted werden.

Deises Feld hat allerdings den Datentyp number (10,2).

Wie bekomme ich bitte dieses Feld jetzt konvertiert.

Alles was ich bisher probiert hat ist fehlgeschlagen.

Ich kenn zwar die Funktion to_number, allerdings weiß ich sie nicht recht anzuwenden.

Wenn ich die Funktion so verwende funbktioniert sie nicht.

Beispiel:

to_number(Menge)

oder

to_number('Menge')

Fehlt mir hier ein parameter, oder geht das so in der Form gar nicht

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich habe ein kleines Problem, und finde dazu im Netz leider keine passende Lösung.

Also ich habe eine Tabelle, die enthält 5 Attribute.

alle attribute sind im Format VARCHAR2(2000 BYTE).

Achso, es handelt sich um eine Oracle Datenbank.

In dieser Tabelle gibt es ein Feld Menge, welöches mit Werten wiefolgt gefüllt ist:

Beispiel:

9999.000

9.916

Diese Werte sollen jetzt in ein andere Tabelle gesinserted werden.

Deises Feld hat allerdings den Datentyp number (10,2).

Wie bekomme ich bitte dieses Feld jetzt konvertiert.

Alles was ich bisher probiert hat ist fehlgeschlagen.

Ich kenn zwar die Funktion to_number, allerdings weiß ich sie nicht recht anzuwenden.

Wenn ich die Funktion so verwende funbktioniert sie nicht.

Beispiel:

to_number(Menge)

oder

to_number('Menge')

Fehlt mir hier ein parameter, oder geht das so in der Form gar nicht

Danke

Hallo,

du kannst dies hier probieren :


CREATE TABLE number_in_varchar_ii (this_is_a_number VARCHAR2 (50 BYTE));



INSERT INTO number_in_varchar_ii

  VALUES   (

                '12'

           );


INSERT INTO number_in_varchar_ii

  VALUES   (

                '13'

           );


INSERT INTO number_in_varchar_ii

  VALUES   (

                '14,3'

           );


INSERT INTO number_in_varchar_ii

  VALUES   (

                'A1'

           );


INSERT INTO number_in_varchar_ii

  VALUES   (

                '23,34a'

           );


INSERT INTO number_in_varchar_ii

  VALUES   (

                NULL

           );




SELECT   this_is_a_number,

         TO_NUMBER (XMLQUERY ('number($X)'

                        PASSING this_is_a_number AS x RETURNING CONTENT))

             n

  FROM   number_in_varchar_ii;




THIS_IS_A_NUMBER    N

----------------    ------------------

12                  12                

13                  13                

14,3                14.300000000000001

A1                                    

23,34a                                


Gruss

Bearbeitet von dbwizard
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ist das so richtig?

Habe deine Ändeurng übersehen.

Hm das sieht mir aber nach einem großen konstrukt aus.

ich brauch das eher recht einfach.

Ich habe wie gesagt eine Tabelle, aus der ich täglich die Daten von a nach b schaufeln muß.

Leider bekommen wir die Daten nur im String format geliefert, müssen diese aber zur Weiteren verarbeitung aber in eine zahl umwandeln.

Gehrt das nicht einfacher?

Bearbeitet von simsalabim
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ist das so richtig?

SELECT Menge,

TO_NUMBER (XMLQUERY ('number(Menge)' PASSING Menge AS Menge RETURNING CONTENT))

n

FROM stage.bom;

Da kommt bei mir ne Fehlermeldung.

Sorry, aber ich totaler Oracle Neuling

Danke




SELECT   Menge,

         TO_NUMBER (XMLQUERY ('number($X)'

                        PASSING Menge AS x RETURNING CONTENT))

             n

  FROM   stage.bom;


- Das Menge kannst du natürlich im SELECT Teil weglassen, wenn du nur den konvertierten Wert (n) benötigst

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ist das so richtig?

Habe deine Ändeurng übersehen.

Hm das sieht mir aber nach einem großen konstrukt aus.

ich brauch das eher recht einfach.

Ich habe wie gesagt eine Tabelle, aus der ich täglich die Daten von a nach b schaufeln muß.

Leider bekommen wir die Daten nur im String format geliefert, müssen diese aber zur Weiteren verarbeitung aber in eine zahl umwandeln.

Gehrt das nicht einfacher?

- Das "Grosse" Konstrukt ist nur ein Beispiel...Der eigentlich Code-Teil (siehe unten) ist "klein"...Der Vorteil dieser Lösung mit dem XML Konstrukt ist,dass "Nicht-Konvertierbare" Werte einfach leegelassen werden und nicht mit einem ORA Fehler abbrechen

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

leide rist ,mir immer noch nicht klar wie das funktionieren soll.

Also mein insertskript sieht wiefolgt aus

insert into ARTIKELBEZIEHUNGEN

(

PBEZ_PAR_PART_ID,

PBEZ_PART_ID,

PBEZ_TYP_ID,

PBEZ_WERT,

PBEZ_BESCHR,

PBEZ_WERK_ID,

PBEZ_ANZ_1,

PBEZ_ANZ_2,

PBEZ_STATUS,

PBEZ_SYSTEM

)

select

MATNR,

IDNRK,

STLAL,

MATNR,

MATNR,

WERKS,

SORTF,

MENGE,

'A',

'SAP'

from

Artikelbez.;

commit;

Im Feld Menge steht halt jetzt z.b. 99.00 oder 1234.00

Wie bekomme ich das jetzt relative infach umgewandelt?

Kannst du mir die codezeile evtl. anpassen?

danke danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

leide rist ,mir immer noch nicht klar wie das funktionieren soll.

Kannst du mir die codezeile evtl. anpassen?

danke danke


insert into ARTIKELBEZIEHUNGEN

(     

    PBEZ_PAR_PART_ID,

    PBEZ_PART_ID,

    PBEZ_TYP_ID,

    PBEZ_WERT,

    PBEZ_BESCHR,

    PBEZ_WERK_ID,

    PBEZ_ANZ_1,

    PBEZ_ANZ_2,

    PBEZ_STATUS,

    PBEZ_SYSTEM

)

select 

    MATNR,

    IDNRK,

    STLAL,

    MATNR,

    MATNR,

    WERKS,

    SORTF,

    TO_NUMBER (XMLQUERY ('number($X)'PASSING Menge AS x RETURNING CONTENT))   AS Neue_MENGE,

    'A',

    'SAP'

from 

    Artikelbez.;


(Ungetestet...)

Ausserdem...Bist du sicher, das deine Tabelle so heisst (mit dem Punkt) ?

....

from

Artikelbez.;

....

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

und danke vielmals

Natürlich hast du recht, meine Tabelle heißt natürlich nicht so.

danke schön, war ein Tippfehler.

Habe allerdings eine Fehlermeldung erhalten:

Error at Command Line:22 Column:45

Error report:

SQL Error: ORA-00932: Inkonsistente Datentypen: - erwartet, - erhalten

00932. 00000 - "inconsistent datatypes: expected %s got %s"

*Cause:

*Action:

Das ist genau die wichtige zeile, ich habe sie mal farblich markiert.


insert into ARTIKELBEZIEHUNGEN

(     

    PBEZ_PAR_PART_ID,

    PBEZ_PART_ID,

    PBEZ_TYP_ID,

    PBEZ_WERT,

    PBEZ_BESCHR,

    PBEZ_WERK_ID,

    PBEZ_ANZ_1,

    PBEZ_ANZ_2,

    PBEZ_STATUS,

    PBEZ_SYSTEM

)

select 

    MATNR,

    IDNRK,

    STLAL,

    MATNR,

    MATNR,

    WERKS,

    SORTF,

   [COLOR="Red"][B] TO_NUMBER (XMLQUERY ('number($X)'PASSING Menge AS x RETURNING CONTENT))   AS Neue_MENGE,[/B][/COLOR]    'A',

    'SAP'

from 

    Artikelbez.;


(Ungetestet...)

Ausserdem...Bist du sicher, das deine Tabelle so heisst (mit dem Punkt) ?

....

from

Artikelbez.;

....

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo

und danke vielmals

Natürlich hast du recht, meine Tabelle heißt natürlich nicht so.

danke schön, war ein Tippfehler.

Habe allerdings eine Fehlermeldung erhalten:

Error at Command Line:22 Column:45

Error report:

SQL Error: ORA-00932: Inkonsistente Datentypen: - erwartet, - erhalten

00932. 00000 - "inconsistent datatypes: expected %s got %s"

*Cause:

*Action:

Das ist genau die wichtige zeile, ich habe sie mal farblich markiert.

ehemm..ich stelle die Frage natürlich etwas spät, aber welche Oracle- Version verwendest du ?

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich glaube es sit die version

Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production

Hilft das weiter

Gruß

Was passiert, wenn du :



select 

    TO_NUMBER (XMLQUERY ('number($X)'PASSING Menge AS x RETURNING CONTENT))   AS Neue_MENGE

from   Artikelbez.;

ausführst ?

Gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

wenn ich nur den Select ausführe erhalte ich folgende fehlermeldung:

Error starting at line 1 in command:

select

TO_NUMBER (XMLQUERY ('number($X)'PASSING Menge AS x RETURNING CONTENT)) AS Neue_MENGE

from stage.bom

Error at Command Line:2 Column:45

Error report:

SQL Error: ORA-00932: Inkonsistente Datentypen: - erwartet, - erhalten

00932. 00000 - "inconsistent datatypes: expected %s got %s"

*Cause:

*Action:

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

Dein Problem ist der . und evtl. alphanummerische Zeichen in diesem Feld. XML in allen Ehren :D aber ich würd das einfach so machen:

create table src

( src_col varchar2(2000));


create table dest

(dest_col number(10,2));


begin

 [URL="http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_errlog.htm"]dbms_errlog.create_error_log[/URL]('DEST');

end;

/


insert into src values('123.456');

insert into src values('234.000007');

insert into src values('234.567');

insert into src values('10.bg');


insert into dest (dest_col)

 select to_number(replace(src_col,'.',',')) from src [URL="http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9014.htm#BGBEIACB"]log errors into[/URL] err$_dest reject limit unlimited;


select substr(src_col,1,10) from src; 


select * from dest;


select * from err$_dest;

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

danke für die Antwort.

Zunächst möchte ich sagen, dass es in diesem Feld keine Alphanumerischen Daten gibt, wobei das feld allerdings ja als varchar deklariert ist.

Es sind nur Werte darin, die mit einem Punkt getrennt sind.

Gibt es wirtklich nichts einfacheres, diese werte in einen numerischen umzuwandeln?

Oder hilft das, wenn ich mir die werte mit einem Komma trennen lasse?

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, nun ist alles vollbarcht.

Oracle macht doch alles selbstständig.

Kommt ein wert im Varcharformat, wandelt dies Oracle selbstständig um.

Eine Sache haeb ich allerdings noch auf dem herzen, ich wandle jetzt als das GTextfeld in eine Zahl um, damit die Zahl auch den Deutschen Konventionen entspricht habe ich zusätzlich die Funktionen replace eingesetzt, die mir den Punkt durch ein Komma ersetzt.

Leider schneidet er nun die letzten beiden Stellen ab, bzw. läßt die Kommas weg, wenn die Nachkommastellen 00 betragen.

Kann ich hier noch was einstellen, das er mir auf jeden Fall die Nachkommastellen anzeigt?

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...