Verständnisfrage zu Transact-SQL Befehl CONVERT
Diese Frage betrifft die Konvertierung von einen Datentyp in den anderen und die damit verbundene Ausgabe in einem SQL Script unter MS-SQL Server 2005
Hallo zusammen,
ich hatte eine Frage zu einem Script, was uns von unserem Zeiterfassungsdienstleister zur Verfügung gestellt worden ist:
Genau genommen handelt es sich um diese beiden Zeilen Code:
Zur Verständnis:
@v_von_stunde vom Typ varchar(02)
@v_von_minute vom Typ varchar(02)
@v_bucheinz_von_zeit_min vom Typ Integer
In der Variable @v_bucheinz_von_zeit_min ist definitiv jedesmal (geprüft) ein Wert enthalten. (Bespielsweise 481) Dieses repräsentiert die "Anstempelzeit" eines Mitarbeiters.
Logischerweise, und das ist meine Verständnisfrage, müsste allerdings in @v_von_minute immer der Wert "0" (s.o.) nach der Berechnung/ KOnvertierung enthalten sein, da für mich (x-((x/60)*60)) stets 0 (egal bei welchem x ) ergibt. Allerdings ist auch in dieser Variable DEFINITIV der richtige Wert enthalten!
Mit dem Bespiel oben: 481 bei @bucheinz_von_zeit_min ergibt sich für @v_von_stunde=8 und für @v_von_minute=1. (480 Minuten=8 Stunden...)
Wäre wirklich sehr dankbar für jede Hilfe bei der Klärung dieser Frage!!!
Gruß
Markus
@edit:
Problem gelöst! Microsoft hat unverständlicherweise den Sinn der Mathematik verdreht!
Laut MSDN Eintrag und mehrmaligem Lesen ist mir Folgendes bei der Division zwei integer Werte aufgefallen:
siehe http://msdn.microsoft.com/de-de/library/ms175009.aspx
<zitat>
Wenn ein ganzzahliger dividend-Wert durch einen ganzzahligen divisor-Wert geteilt wird, ist das Ergebnis ein ganzzahliger Wert, dessen Bruchstellen abgeschnitten werden.
<zitat>
In diesem Fall bedeutet das: 481:60 = 8,01.... Das ,01 wird abgeschnitten und es bleibt lediglich die 8 übrig, da zwei INTEGER Werte (Dividend und Divisor) durch einander geteilt werden.
Gruß
markus
Hallo zusammen,
ich hatte eine Frage zu einem Script, was uns von unserem Zeiterfassungsdienstleister zur Verfügung gestellt worden ist:
Genau genommen handelt es sich um diese beiden Zeilen Code:
...
set @V_von_stunde = convert(varchar,convert(integer,(@V_bucheinz_von_zeit_min / 60)))
set @V_von_minute = convert(varchar,convert(integer, (@V_bucheinz_von_zeit_min - ((@V_bucheinz_von_zeit_min / 60)*60))))
...
Zur Verständnis:
@v_von_stunde vom Typ varchar(02)
@v_von_minute vom Typ varchar(02)
@v_bucheinz_von_zeit_min vom Typ Integer
In der Variable @v_bucheinz_von_zeit_min ist definitiv jedesmal (geprüft) ein Wert enthalten. (Bespielsweise 481) Dieses repräsentiert die "Anstempelzeit" eines Mitarbeiters.
Logischerweise, und das ist meine Verständnisfrage, müsste allerdings in @v_von_minute immer der Wert "0" (s.o.) nach der Berechnung/ KOnvertierung enthalten sein, da für mich (x-((x/60)*60)) stets 0 (egal bei welchem x ) ergibt. Allerdings ist auch in dieser Variable DEFINITIV der richtige Wert enthalten!
Mit dem Bespiel oben: 481 bei @bucheinz_von_zeit_min ergibt sich für @v_von_stunde=8 und für @v_von_minute=1. (480 Minuten=8 Stunden...)
Wäre wirklich sehr dankbar für jede Hilfe bei der Klärung dieser Frage!!!
Gruß
Markus
@edit:
Problem gelöst! Microsoft hat unverständlicherweise den Sinn der Mathematik verdreht!
Laut MSDN Eintrag und mehrmaligem Lesen ist mir Folgendes bei der Division zwei integer Werte aufgefallen:
siehe http://msdn.microsoft.com/de-de/library/ms175009.aspx
<zitat>
Wenn ein ganzzahliger dividend-Wert durch einen ganzzahligen divisor-Wert geteilt wird, ist das Ergebnis ein ganzzahliger Wert, dessen Bruchstellen abgeschnitten werden.
<zitat>
In diesem Fall bedeutet das: 481:60 = 8,01.... Das ,01 wird abgeschnitten und es bleibt lediglich die 8 übrig, da zwei INTEGER Werte (Dividend und Divisor) durch einander geteilt werden.
Gruß
markus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 95010
Url: https://administrator.de/forum/verstaendnisfrage-zu-transact-sql-befehl-convert-95010.html
Ausgedruckt am: 25.12.2024 um 13:12 Uhr