![]() |
Re: Datum zu KW mittels SQL
Datum ist vom Typ smalldatetime.
Durch deinen Tipp des Einkreisens habe ich festgestellt, dass der Fehler auftritt, wenn ich den 2.1.2009 in die Abfrage mit einschließe. Zu den Daten 1.1., 3.1. und 4.1. gibt es keine Datensätze. Demzufolge muss in der Funktion bzgl. dem Abschnitt "--Jan 1-3 may belong to the previous year " etwas falsch sein. Genau darauf verweist ja auch die SQL Fehlermeldung. |
Re: Datum zu KW mittels SQL
Warum in der UDF im Bereich dieses Sonderfalls der ersten drei Januartage ein Fehler ist, finde ich nicht heraus.
Ich habe jetzt die ISOweek UDF so abgeändert, dass die Sonderfälle nicht weiter bearbeitet werden. Dass jetzt die ersten drei Januartage zur KW 0 oder die letzten drei Dezembertage zur KW 53 führen, ist mir für meine Auswertungen sogar lieber. Nichtsdestotrotz interessiert mich die Lösung zu diesen Fehler weiterhin. |
Re: Datum zu KW mittels SQL
Hallo,
führe bitte mal auf Deinem SQL-Server folgendes SQL aus:
SQL-Code:
Bei mir kommt als Ergebnis 1, 2 , -1 raus. Eigentlich dürfte die Funktion den Bereich in der IF-Abfrage
select DATEPART(wk, '01.01.2009') + 1 - DATEPART(wk, CAST( DATEPART( yy, '01.01.2009' ) AS CHAR(4) ) + '0104' ),
DATEPART(wk, '01.01.2009') + 1, - DATEPART(wk, CAST( DATEPART( yy, '01.01.2009' ) AS CHAR(4) ) + '0104' )
SQL-Code:
nicht durchlaufen.
IF ( @ISOweek = 0 )
Habe jetzt mal die Funktion bei mir angelegt und für die Werte 01.01.2009 bis 12.01.2009 getestet. Es tritt kein Fehler auf. Hast Du da irgendein Problem mit Datenbankeinstellungen? |
Re: Datum zu KW mittels SQL
Bei mir ist das Ergebnis 0, 2, -2
Ich habe MSSQL Server 2000 |
Re: Datum zu KW mittels SQL
Hallo,
ich habe 2003, d. h.: Die Wochenberechnung der SQL-Server-Varianten unterscheidet sich. Da wirst Du Deine Funktion entsprechend anpassen müssen. |
Re: Datum zu KW mittels SQL
Wo sind denn die Unterschiede in Datepart in den verschiedenen SQL Server Versionen?
Gibt es ein MS Dokument dazu? |
Re: Datum zu KW mittels SQL
Hallo,
Zitat:
Versuche es bitte mal mit Google: ![]() ![]() ![]() ![]() Du findest überall Beschreibungen zu Datepart. Mir ist es auf die Schnelle nicht gelungen, hier eine Seite zu finden, die die Unterschiede zwischen den einzelnen Versionen heraushebt. |
Re: Datum zu KW mittels SQL
Danke schon mal für die Links.
Die Frage ist, wer von uns beiden die 'falsche' SQL Server Version einsetzt. Ich habe die fn_ISOweek() vom dotnetnukeblog, welche in der ersten Antwort in diesem Thread gepostet wurde. Auf dieser Seite wird auf DATEPART aus Transact-SQL Reference (SQL Server 2000) von MSDN verwiesen. Demzufolge gehe ich davon aus, dass die ISOweek Funktion für MSSQL 2000 geschrieben wurde. Tatsache ist aber, dass die beiden MSSQL Versionen unterschiedliche Resultate ausgeben. Was davon die richtige kann ich jetzt auf die schnelle nicht beurteilen. |
Re: Datum zu KW mittels SQL
Hallo,
Zitat:
Zitat:
Zitat:
Zitat:
Ich gehe mal davon aus, dass zwischen den einzelnen Versionen in dem Bereich Anpassungen vorgenommen wurden. Ob das jetzt irgendwo dokumentiert ist, kann ich nicht sagen. Da habe ich auch nicht die Zeit, um das herauszufinden. |
Re: Datum zu KW mittels SQL
Bzgl. wk,ww macht die msdn für MSSQL 2008 die selbe Aussage wie für SQL 2000+2005
Zitat:
Möglicherweise resultieren unsere Unterschiede in
SQL-Code:
aus unterschiedlichen Landeseinstellungen. Wochenerster scheint im englischsprachlichen Raum der Sonntag zu sein und im deutschsprachigen der Montag.
select DATEPART(wk, '01.01.2009') + 1 - DATEPART(wk, CAST( DATEPART( yy, '01.01.2009' ) AS CHAR(4) ) + '0104' ),
DATEPART(wk, '01.01.2009') + 1, - DATEPART(wk, CAST( DATEPART( yy, '01.01.2009' ) AS CHAR(4) ) + '0104' ) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz