Announcement

Collapse
No announcement yet.

year Funktion iefert KEIN integer ?

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

  • year Funktion iefert KEIN integer ?

    Aufgabenstellung: liste alle Rchnung seit Jahr 2009 bis heute !
    "select * from rechnungen where year(datum) >= 2009"
    listet NUR die Rechnungen von 2009 !

    Während:
    "select * from rechnungen where convert(year(rechdat),sql_integer) >= 2009"
    aber funktioniert !

    Ist diese Konvertierung nach INTEGER denn notwendig ?

    Mit freundlichen Grüßen

    Uwe

  • #2
    gerade in ADS 10 getestet - da funktioniert es hervorragend. Welche Version verwendest Du?

    Comment


    • #3
      year Funktion iefert KEIN integer ?

      Wir verwenden den ADS 9.1

      Noch sind wir nicht soweit alles auf den 10er umzustellen.

      Stichwort ADVANTEX

      Comment


      • #4
        in Version 9.10.0.9 habe ich gerade folgendes getestet:

        Code:
        create table #tmp(id autoinc, d date);
        insert into #tmp(d) values('2010-01-01');
        insert into #tmp(d) values('2009-01-01');
        insert into #tmp(d) values('2008-01-01');
        insert into #tmp(d) values('2010-06-01');
        insert into #tmp(d) values('2009-06-01');
        insert into #tmp(d) values('2008-06-01');
        
        select * from #tmp where year(d)>=2009;
        liefert exakt 4 Datensätze, was m.M. nach richtig ist

        Comment


        • #5
          sql> select count(*) from rechnungen where year(rechdat) = 2009
          liefert 201814 Datensätze! <RICHTIG>

          sql> select count(*) from rechnungen where year(rechdat) = 2010
          liefert 101311 Datensätze! <RICHTIG>

          sql> select count(*) from rechnungen where year(rechdat) >= 2009
          liefert 201814 Datensätze! <FALSCH>

          sql> select count(*) from rechnungen
          sql> where convert(year(rechdat),sql_integer) >= 2009
          liefert 303125 Datensätze! <RICHTIG>


          > select id, rechdat into #tmp from rechnungen;
          > select count(*) from #tmp where year(rechdat) >= 2009
          liefert 303125 Datensätze!

          Wenn ich die betreffenden Daten zuerst in eine temporäre Tabelle schiebe, und diese dann auswerte funktioniert es wie erwartet.

          ADS Version 9.10.0.21

          Frage: Könnte die Ursache für den Fehler ein defekter Index auf dem Rechnungsdatum sein ?

          Comment


          • #6
            ich denke nicht, dass es ein Indexfehler ist außer, ihr habt einen Index auf year(rechdat) angelegt. Welcher Datentyp ist RechDat?

            Comment


            • #7
              > ich denke nicht, dass es ein Indexfehler ist außer, ihr habt einen Index auf year(rechdat) angelegt. Welcher Datentyp ist RechDat?


              Der Datentyp des Feldes "Rechdat" ist DATE und hat einen Index.

              Diese Problem mit der Funktion CONVERT zu umgehen halte ich für nicht zweckmäßig, da es quasi unmöglich ist, alle SQL-Scripte in der Anwendung entsprechent zu modifizieren, nur um das Problem zu umgehen.

              Comment


              • #8
                schick's mal bitte rein, dann können wir es untersuchen.

                Comment

                Working...
                X