Ergebnis in Sql Abfrage wird falsch dargestellt

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Yanbel.

    Ergebnis in Sql Abfrage wird falsch dargestellt

    Moin,

    kann das bitte mal jemand überprüfen und mir sagen, was bei euch im ManagementStudio bzw. in HeidiSql/phpMyAdmin angezeigt wird?

    *Nachtrag, SQL Server 2019, ManagementStudio 18.10

    MSSQL:

    SQL-Abfrage

    1. SELECT CAST(30 / 60 AS FLOAT) * 4 AS WertMinute


    MySQL:

    SQL-Abfrage

    1. SELECT CAST(30 / 60 AS DOUBLE) * 4 AS WertMinute


    MSSQL zeigt 0 an, MySql 2

    Warum zeigt MSSQL hier 0 an, obwohl 2 richtig wäre?
    Egal wie man das Ergebnis casted, es kommt immer 0 bei raus.

    SQL-Abfrage

    1. SELECT (30 / 60) * 4 AS WertMinute;
    2. SELECT CAST(30 / 60 AS FLOAT) * 4 AS WertMinute;
    3. SELECT CAST(30 / 60 AS REAL) * 4 AS WertMinute;
    4. SELECT CAST(30 / 60 AS DECIMAL) * 4 AS WertMinute;


    Verwirrte Grüße :)

    *Edit
    Hat sich inzwischen erledigt, das Verhalten soll so normal sein. Division von zwei Int Werten ergibt auch Int, daher 0. Also zuvor einen der Divisoren zu Float, Real oder Decimal casten, dann gehts.

    Scheint schon lange / immer so zu sein bei Microsoft. Warum muss man nicht verstehen ...

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „BlueLagoonX“ ()

    Hallo,
    Du musst beide Integer-Werte in einen FLOAT casten, dann klappt das auch mit dem Nachbarn :)
    SELECT (CAST(30 AS FLOAT) / CAST(60 AS FLOAT) * 4) AS ColName

    Edit:
    Habe dein Edit zu spät gesehen aber:
    Scheint schon lange / immer so zu sein bei Microsoft. Warum muss man nicht verstehen

    Naja, wenn zwei Integer reingegeben werden, kommt halt auch ein Integer raus. Ist in diversen Programmiersprachen nicht anders

    C#-Quellcode

    1. int a = 10;
    2. int b = 3;
    3. var c = a / b;
    4. Console.WriteLine(c.GetType().ToString());

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ISliceUrPanties“ ()

    Die Werte sind nur ein Beispiel gewesen. Intern soll dann mit Feld1(Int) / Feld2(Int) gerechnet werden.

    Habe jetzt in der Berechnung beide Felder als Float gecastet, dann funktioniert alles. Trotzdem nicht schön, dass SQL nicht automatisch Real/Float als Ergebnisses zurück gibt. Zumal MySql das problemlos macht.

    BlueLagoonX schrieb:

    Trotzdem nicht schön, dass SQL nicht automatisch Real/Float als Ergebnisses zurück gibt.


    Ist ähnlich wie der Unterschied zwischen Option Strict On und Option Strict Off eine reine Philosophiefrage. Ich betrachte implizite Konvertierung mittlerweile als lästig, weil ich verstärkt C# programmiere und C# ist nun mal deutlich strikter als VB. Sauber typisierte und strikte Programmierung beugt vielen Problemen vor und steigert die Performance. Das MySQL implizit konvertiert, ist einer der Gründe warum MSSQL deutlich perfomanter ist. Ich bin ehrlich gesagt sehr froh darüber, dass MSSQL so arbeitet, wie es arbeitet.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.