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 2 von 3     12 3      
PASST

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

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 12:15
Das mit dem User dbo verstehe ich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#12

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 12:22
Die Funktion wurde ja explizit im Schema "dbo" angelegt, d.h. es "gehört" allen Nutzern, die der Rolle "DB-Owner" angehören (hoffentlich schreib ich jetzt nicht zuviel Quatsch). Entgegen meiner vorherigen Aussage gibt es den "Nutzer" dbo AFAIK gar nicht, sondern das ist eine Art Alias auf den DB-Owner. Sollte das alles so nicht richtig sein, bitte ich um Richtigstellung durch einen MS-SQL-Kundigen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
PASST

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

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 12:24
danke
  Mit Zitat antworten Zitat
PASST

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

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 15:19
Ich habe in diesem Zusammenhang ein neues Problem.

Diese Abfrage funktioniert:
SQL-Code:
select dbo.fn_ISOweek(Datum)
from Tabelle
where year(Datum) = year(GetDate)
and month(Datum) = month(GetDate())
Die folgende Abfrage erzeugt die Fehlermeldung:
SQL-Code:
Server: Msg 557, Level 16, State 2, Procedure fn_ISOweek, Line 18
Only functions and extended stored procedures can be executed from within a function.

select dbo.fn_ISOweek(Datum)
from Tabelle
where year(Datum) = year(GetDate)
and month(Datum) < month(GetDate())
Warum wird bei "<" und "=" ein Unterschied gemacht, der zu dieser Fehlermeldung führt?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#15

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 15:30
Hallo,

laut Fehlermeldung ist das Problem in der Zeile 18 der Funktion fn_ISOWeek zu suchen.
Die Abfrage auf < könnte eventuell auch Zeilen finden, in denen Datum Null ist und dies könnte Deine Funktion in die Pedrullie bringen.

Probiere es mal mit
SQL-Code:
select dbo.fn_ISOweek(Datum)
from Tabelle
where year(Datum) = year(GetDate)
and month(IsNull(Datum,'01.01.1900')) < month(GetDate())
Ändere Deine Funktion ggfls. so, dass sie auch mit Null-Werten umgehen kann.

PS: Das ist jetzt nur 'ne Vermutung.
  Mit Zitat antworten Zitat
PASST

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

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 15:32
Nein, ich habe gerade geprüft, NULL-Werte gibt es nicht.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#17

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 15:49
Hallo,

zeig' uns bitte mal die ganze Funktion, so dass man sehen kann was in Zeile 18 passiert und wo da eventuell ein Fehler liegen könnte. Tritt der Fehler auch bei > oder <> oder <= oder >= auf?
Sind überall ein gültige Datumswerte enthalten?
  Mit Zitat antworten Zitat
PASST

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

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 15:53
Irgendwas muss mit den Daten nicht stimmen!

Am "=" oder "<" liegt es nicht.
SQL-Code:
select dbo.fn_ISOweek(Datum)
from Tabelle
where year(Datum) = 2009
-- Resultat ist die Fehlermeldung:
Server: Msg 557, Level 16, State 2, Procedure fn_ISOweek, Line 18
Only functions and extended stored procedures can be executed from within a function.


select dbo.fn_ISOweek(Datum)
from Tabelle
where year(Datum) = 2008
-- Resultat ist keine Fehlermeldung
Irgendwo müssen in meinen Daten aus 2009 ein Fehler sein. Wie kann ich das feststellen?

SQL-Code:
CREATE FUNCTION dbo.fn_ISOweek (
@DATE datetime
)
RETURNS int
AS
BEGIN
DECLARE @ISOweek int

SET @ISOweek = DATEPART(wk, @DATE) + 1 -
DATEPART(wk, CAST( DATEPART( yy, @DATE ) AS CHAR(4) ) + '0104' )
--Jan 1-3 may belong to the previous year
IF ( @ISOweek = 0 )
BEGIN
DECLARE @Date2 datetime
SET @DATE2 = CAST( DATEPART( yy, @DATE ) - 1 AS CHAR(4) ) +
'12' + CAST( 24 + DATEPART( DAY, @DATE ) AS CHAR(2) )
-- rekursiver Aufruf:
EXEC @ISOWeek = ISOWeek @DATE2 <-- Zeile 18
SET @ISOWeek = @ISOWeek + 1
END
--Dec 29-31 may belong to the next year
IF ( ( DATEPART( mm, @DATE ) = 12 ) AND
( ( DATEPART( dd, @DATE ) - DATEPART( dw, @DATE) ) >= 28 ) )
SET @ISOweek=1
RETURN(@ISOweek)
END
  Mit Zitat antworten Zitat
PASST

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

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 16:00
SQL-Code:
select Datum
from Tabelle
where year(Datum) = 2009
Zeigt mir etwa 7000 Sätze an, optisch kann dabei aber nicht feststellen ob ein Fehler vorliegt.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#20

Re: Datum zu KW mittels SQL

  Alt 12. Feb 2009, 16:07
Hallo,
Zitat von PASST:
Irgendwas muss mit den Daten nicht stimmen!
Das sehe ich auch so.

kannst Du aus dieser Zeile EXEC @ISOWeek = ISOWeek @DATE2 irgendwie @DATE2 ausgeben?
Notfalls vor dem Exec in eine Tabelle schreiben.
So nach dem Motto:
create table pruefmalwas (Datum Varchar(200)); Dieser Tabelle einen Datensatz gönnen:
Insert into pruefmalwas values ('01.01.1900'); Deine Funktion vor dem EXEC um ein Update pruefmalwas set Datum = @DATE2; ergänzen.
Dann sollte in der Tabelle der Wert stehen, der zu dem Fehler führt. Eventuell musst da aber noch ein Commit gemacht werden.

Der Fehler muss in den 2009er Daten liegen, sind das viele Daten oder kannst Du die auch von Hand überprüfen?

Ansonsten:
SQL-Code:
select dbo.fn_ISOweek(Datum)
from Tabelle
where year(Datum) = 2008
and month(Datum) = 1
und das dann für alle Monate, bis es kracht und dann notfalls auch noch für den betreffenden Monat für alle Tage.

Monate könntest Du auch mit < 7 anfangen, wenn kein Fehler > 6 und so an den Fehler herantasten.
Welchen Datentyp hat Datum in der Datenbank?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 12:27 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