Announcement

Collapse
No announcement yet.

Zahl ist als NVARCHAR deklariert - Konvertieren in INT möglich, um Summen zu bilden ?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zahl ist als NVARCHAR deklariert - Konvertieren in INT möglich, um Summen zu bilden ?

    Hallo Zusammen,

    wir nutzen im Unternehmen den SQL Server 2016. In dieser Datenbank besteht eine Tabelle "Anzahl" die aus 3 Spalten (Kunden_ID, Kunden_Name, Anzahl_Verkauf) besteht. Die Spalte "Anzahl_Verkauf" beinhaltet tatsächlich die Anzahl der Käufe des Kunden (z.B 15) ABER das im "NVARCHAR" Format
    Ich kann in meiner Abfrage natürlich keine Summe ziehen. Ich erhalte immer die Fehlermeldung "Operand data type nvarchar is invalid for sum Operator". Kann mir bitte jemand diesbezüglich behilflich sein? Ich muss in meiner Abfrage Summen bilden. Die Datenmenge liegt bei über 3 Millionen, daher kann ich die Daten
    nicht in Excel kopieren und dort weiterverarbeiten.

    Vielen Dank im Voraus. Ich hoffe, dass ich Euch mein Problem verdeutlichen konnte und ihr mir weiterhelfen könnt.

    Gruß,
    Melih
    PS: Ich weiß auch nicht wer auf die dumme Idee gekommen ist, ein solches Feld als NCARCHAR zu deklarieren :-(((

  • #2
    Versuch mal
    SELECT convert (int, N'tabelle.meineSpalte') FROM tabelle

    Wenn das geht, dann noch das SUM drum rum.
    Gruß, defo

    Comment


    • #3
      Ich weiß auch nicht wer auf die dumme Idee gekommen ist, ein solches Feld als NCARCHAR zu deklarieren :-(((
      Du kennst aber bestimmt jemanden der das ändern kann.

      Comment


      • #4
        NVARCHAR
        Wie schon geschrieben: (implizit) casten ( https://docs.microsoft.com/de-de/sql...t-transact-sql ) oder den Datentyp ändern lassen ( https://docs.microsoft.com/de-de/sql...e-transact-sql )
        MfG
        Cheat-Sheets for Developers / Programming Quotes

        Comment


        • #5
          Guten Morgen Zusammen,

          leider hat es nicht funktioniert Ich habe folgende zwei Befehle versucht:
          Code:
            SELECT convert (int, [tabelle].[Spalte])  FROM [tabelle]
          
          UND
          
          SELECT CAST (Spalte] AS int (25)) as int FROM [tabelle]
          Ich habe in beiden fällen folgende Fehlermeldung erhalten:

          Conversion failed when converting the nvarchar value '2,00' to data type int

          Habt Ihr eine Idee, weshalb es nicht funktioniert hat? Ich bin über Eure Hilfe sehr dankbar!!!

          Gruß
          Melih

          Comment


          • #6
            2 Komma 00 ist eben keine Zahl und schon gar kein INT
            Wahrscheinlich vorab noch das Komma durch einen Punkt ersetzen
            Christian

            Comment


            • #7
              Das ist mir nicht bewusst gewesen. Ich dachte, dass 2,00 genauso wie 2.00 ist. Ich habe jetzt etwas rumprobiert und mit REPLACE die Werte geändert, sodass die Werte jetzt als 2.00 angezeigt werdenin meiner Abfrage.
              Code:
              	SELECT 
               REPLACE([Spalte],',','.')  as Neu
              
              FROM [tabelle]
              Aber ich bekomme noch keine Summe hin. Und ja, ich hatte einen Denkfehler 2.00 nicht als int sondern als float zu konvertieren. Aber mit folgendem Befehl bekomme ich wieder eine Fehlermeldung:
              Code:
              	SELECT 
              convert (float, (REPLACE([Spalte],',','.')))  as Neu
              FROM [tabelle]
              Fehlermeldung: Error converting data type nvarchar to float.

              Ich frag mich, ob es überhaupt möglich ist, die Werte in der Spalte als Zahl zu nutzen, um Summen zu bilden?!
              Zuletzt editiert von melih79; 11.10.2017, 07:23.

              Comment


              • #8
                ich kenne MSSQL nicht, aber in Oracle kann man ein sum auf eine Spalte mit NVARCHAR2 loslassen und es werden Leerzeichen ignoriert und auch Kommawerte umgesetzt. Erst wenn wirklich andere Zeichen als Ziffern enthalten sind, gibt das Fehler.
                Also ev. hast du noch anderen Zeichen als Ziffer in den Daten? Leerzeichen?
                Christian

                Comment


                • #9
                  Hallo Christian,

                  ich habe mir die Werte angeschaut ( über Edit Top 200 Rows) und Sie sind ohne Leerzeichen oder sonst was.
                  Zuletzt editiert von melih79; 11.10.2017, 07:57.

                  Comment


                  • #10
                    Kannst du dich nicht rantasten, also erstmal grundsätzlich prüfen ob das geht.
                    select convert ...from table where id=XX
                    Also explizit mit einem Datensatz testen und feststellen, ob es grundsätzlich geht.
                    Wenn es mit einigen Datensätzen dann geht, muss ja dann etwas wohl an den Daten nicht stimmen, dass die nicht umgewandelt werden können.
                    Ggf. dann mit isnumeric prüfen und die Datensätze bei denen das nicht geht in eine extra Tabelle schreiben und die dann analysieren
                    Christian

                    Comment


                    • #11
                      Du hast recht !!! Es geht bei einigen Datensätze. Kannst du mir noch netterweise bei dem SQL Befehl helfen, um die Prüfung mit isnumeric zu gewährleisten? Sodass ich sehe, welche Datensätze er nicht konvertieren kann. Die könnte ich dann anpassen oder ausschließen.

                      Comment


                      • #12
                        nicht konvertieren kann
                        Auch hier könnte die Doku mitsamt Beispiel weiterhelfen: https://docs.microsoft.com/de-de/sql...c-transact-sql
                        MfG
                        Cheat-Sheets for Developers / Programming Quotes

                        Comment


                        • #13
                          es sollte ungefähr so lauten
                          create table TMP_TEST as select *from org_tabelle where isnumeric(spalte)=0
                          Christian

                          Comment


                          • #14
                            Hallo Markus,

                            hab ich schon versucht gehabt, bevor ich um Hilfe gebeten habe. Hier der Befehl den ich ausprobiert habe.
                            Code:
                             
                              SELECT [Spalte]    FROM [tabelle]
                             Where ISNUMERIC(convert (float, (REPLACE([Spalte],',','.')))) <> 1;
                            Habe folgende Fehlermeldung erhalten: Error converting data type nvarchar to float.

                            Comment


                            • #15
                              das kann ja nicht funktionieren, wenn du das was den Fehler auslöst (convert...) weiter benutzt und dann auch noch "bevor" die isnumeric-Prüfung erfolgt
                              Christian

                              Comment

                              Working...
                              X