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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 95010
Url: https://administrator.de/contentid/95010
Printed on: April 26, 2024 at 08:04 o'clock