AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datum zu KW mittels SQL
Thema durchsuchen
Ansicht
Themen-Optionen

Datum zu KW mittels SQL

Offene Frage von "PASST"
Ein Thema von MondoShiva · begonnen am 26. Sep 2008 · letzter Beitrag vom 13. Feb 2009
Antwort Antwort
Seite 3 von 3     123   
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 16:21
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.
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#22

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 16:40
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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#23

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 16:47
Hallo,

führe bitte mal auf Deinem SQL-Server folgendes SQL aus:
SQL-Code:
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' )
Bei mir kommt als Ergebnis 1, 2 , -1 raus. Eigentlich dürfte die Funktion den Bereich in der IF-AbfrageIF ( @ISOweek = 0 ) nicht durchlaufen.
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?
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#24

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 16:55
Bei mir ist das Ergebnis 0, 2, -2

Ich habe MSSQL Server 2000
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#25

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 17:07
Hallo,

ich habe 2003, d. h.: Die Wochenberechnung der SQL-Server-Varianten unterscheidet sich. Da wirst Du Deine Funktion entsprechend anpassen müssen.
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#26

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 17:10
Wo sind denn die Unterschiede in Datepart in den verschiedenen SQL Server Versionen?
Gibt es ein MS Dokument dazu?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#27

Re: Datum zu KW mittels SQL

  Alt 13. Feb 2009, 09:54
Hallo,
Zitat von PASST:
Wo sind denn die Unterschiede in Datepart in den verschiedenen SQL Server Versionen?
Gibt es ein MS Dokument dazu?
die Frage kann ich Dir nicht beantworten.

Versuche es bitte mal mit Google:

+datepart +sql +server +2000 +msdn
+datepart +sql +server +2003 +msdn
+datepart +sql +server +2005 +msdn
+datepart +sql +server +2008 +msdn
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.
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#28

Re: Datum zu KW mittels SQL

  Alt 13. Feb 2009, 10:07
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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#29

Re: Datum zu KW mittels SQL

  Alt 13. Feb 2009, 10:53
Hallo,
Zitat von PASST:
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.
ich spekuliere mal ein bisserl:
Zitat von MSDN zu SQL-Server 2000:
http://msdn.microsoft.com/en-us/library/aa258265(SQL.80).aspx
The week (wk, ww) datepart reflects changes made to SET DATEFIRST. January 1 of any year defines the starting number for the week datepart, for example: DATEPART(wk, 'Jan 1, xxxx') = 1, where xxxx is any year.
Zitat von MSDN zu SQL-Server 2005:
http://msdn.microsoft.com/en-us/library/ms174420(SQL.90).aspx
The week (wk, ww) datepart reflects changes made to SET DATEFIRST. January 1 of any year defines the starting number for the week datepart, for example: DATEPART(wk, 'Jan 1, xxxx') = 1, where xxxx is any year.
Dies dürfte, wenn ich mich nicht irre, nicht der ISO entsprechen und macht daher die Funktion fn_ISOWeek erst erforderlich.
Zitat von MSDN zu SQL-Server 2008:
http://msdn.microsoft.com/en-us/library/ms174420.aspx
datepart Abbreviations
...
week wk, ww
...
ISO_WEEK isowk, isoww
Da ist dann was dazugekommen.
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.
  Mit Zitat antworten Zitat
PASST

Registriert seit: 30. Mär 2005
Ort: Krefeld
325 Beiträge
 
Delphi 7 Enterprise
 
#30

Re: Datum zu KW mittels SQL

  Alt 13. Feb 2009, 11:02
Bzgl. wk,ww macht die msdn für MSSQL 2008 die selbe Aussage wie für SQL 2000+2005
Zitat:
week and weekday datepart Arguments
When datepart is week (wk, ww) or weekday (dw), the return value depends on the value that is set by using SET DATEFIRST.
Es ist halt beim 2008 die Fkt ISO_WEEK dazugekommen.

Möglicherweise resultieren unsere Unterschiede in
SQL-Code:
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' )
aus unterschiedlichen Landeseinstellungen. Wochenerster scheint im englischsprachlichen Raum der Sonntag zu sein und im deutschsprachigen der Montag.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz