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

  • #16
    Man könnte auch mal die Signaturen der Konvertierungsfunktionen anschauen und prüfen, welche Typen sie akzeptieren. Mglw sind sie nicht gegen NVARCHAR implementiert. Dann käme erst noch ein weiterer Schritt NVARCHAR zu VARCHAR dazu.
    Dann hätte man
    NVARCHAR>VARCHAR
    VARCHAR>FLOAT*1
    FLOAT>INT*2

    *1, localization Einstellungen prüfen und geeigneten Dezimaltrenner wählen
    *2, eher keine konvertierung(cast), sondern ein Truncate oder ähnliche Funktion, die den Nachkommateil abschneidet.
    Gruß, defo

    Comment


    • #17
      Hallo defo,

      zu deiner *1 : was meinst du mit localization Einstellungen prüfen? Ich darf an den DAtensätzen leider nichts ändern und es sind auch einige Datensätze mit Nachkommazahl (z.B 2,9), die 0,9 darf ich nicht weg fallen lassen.
      Ich habe hier folgende SQL Anweisung ausprobiert:
      Code:
      		SELECT 
      convert (varchar, (REPLACE([Spalte],',','.'))) test
      FROM [tabelle]
      Das hat ohne Probleme Funktioniert , aber als ich dann von varchar auf float konvertieren wollte ging es mit folgendem Befehl nicht mehr:
      Code:
       
      		SELECT 
      convert( float, convert (varchar, (REPLACE([Spalte],',','.'))))  
      FROM [tabelle]
      Fehlermeldung: Error converting data type varchar to float.

      Ich weiss jetzt gar nicht was ich machen soll

      Comment


      • #18
        @Christian: Das verstehe ich, aber ich weiss nicht, wie ich die isnumeric-Prüfung vor dem convert ausführen soll

        Comment


        • #19
          Kennt MSSQL nicht ein CASE/WHEN
          Christian

          Comment


          • #20
            @Christian: Das verstehe ich, aber ich weiss nicht, wie ich die isnumeric-Prüfung vor dem convert ausführen soll
            Warum willst du vorher ein convert machen Klingt völlig sinnlos. IsNumeric prüft ob der Ausdruck als Zahl darstellbar ist. Wenn du vorher den string in einen float wandelst wird IsNumeric immer true liefern da ein float per Definition eine Zahl ist. Wenn IsNumeric überhaupt eine Zahl als Ausdruck annimmt da die Frage 'Ist meine Zahl eine Zahl?'. wie gesagt, sinnfrei ist. Schieb den varchar in Isnumeric ohne Umwandlung und schau was dabei rumkommt.

            Comment


            • #21
              Hallo Ralf,

              ich habe folgenden Befehl ausgeführt:
              Code:
                SELECT [Spalte],  ISNUMERIC[Spalte]) as Prüfen
              FROM [table]
              Where  ISNUMERIC([Spalte]) =0
              Und als Ergebnis erhalte ich kein Datensatz. Auch wenn ich das Where rausnehme, erhalte ich Datensätze mit immer einer 1 in der Prüf-Spalte.
              Was würdet ihr mir als nächsten Schritt vorschlagen?

              Comment


              • #22
                Durch die where Bedingung bekommst du nur Datensätze die isnumeric = 0 sind. Da macht das 2. im select keinen Sinn
                select * from tabelle where isnumeric(spalte)=0 sollte dir die fehlerhaften anzeigen.
                Christian

                Comment


                • #23
                  Das habe ich jetzt gemacht:
                  Code:
                    select * from [table]  where isnumeric([Spalte])=0
                  Ergebnis : Kein einziger Datensatz

                  Comment


                  • #24
                    Dann würde ich jetzt den Inhalt nach bestimmten Dingen durchsuchen die in Zahlen erlaubt sind (nur das prüft IsNumeric nicht ob das auch wirklich am Ende eine gültige Zahl ergibt).

                    Dinge die mir da einfallen
                    - es enthält Dezimaltrenner im falschen Format
                    - Es enthält tausender Trennzeichen im falschen Format,
                    - Es enthält nur ein +,- oder mehrere davon oder an falscher Stelle
                    - Es enthält Währungszeichen (interessanter Weise werden bei IsNumeric einzelne zugelassen)

                    Comment


                    • #25
                      Ich habe mir die Daten jetzt genauer angeschaut. Rund 2000 Datensätze beinhaltet Werte im folgenden Format "1.000,20" Könnte das der Grund sein?
                      Der Rest der Datensätze hat folgendes Format "4,00".

                      Comment


                      • #26
                        Ja wenn du per replace Komma in Punkt änderst hast du dann ja 2 Punkte in deiner Zahl das kann nicht korrekt sein.

                        Wenn du dir sicher bist das da immer deutsches Zahlenformat benutzt wird und ihr immer maximal 2 Nachkommastellen benutzt habt dann würde ich parse probieren.
                        Etwa
                        [HIGHLIGHT=SQL]select parse(MyLovelyColumn as decimal(10,2) using 'de-DE') from MyLovelyTable[/HIGHLIGHT]
                        Ansonsten mußt du Punkte entfernen bevor du Komma in Punkt änderst und dann convert drauf jagen.

                        Comment


                        • #27
                          Ich werde es morgen auf der Arbeit sofort versuchen. Danke!!!

                          Comment


                          • #28
                            Hier sind ein paar Beispiele:
                            http://rextester.com/IJUNB47831
                            Gruß, defo

                            Comment


                            • #29
                              Hallo Zusammen,

                              ES HAT FUNKTIONIERT !!!!! Die Summen stimmen auch
                              Code:
                              SELECT parse(MyLovelyColumn AS DECIMAL(10,2) USING 'de-DE') FROM MyLovelyTable
                              VIELEN DANK FÜR EURE BEMÜHUNGEN !!!! DANKE RALF !!!

                              Comment

                              Working...
                              X