[MS SQL] - Datepart

DrMueller

Erfahrenes Mitglied
Hallo Leute,

folgende Anforderung an einen SQL hätte ich:
Wir haben eine Tabelle, wo Feiertage drin gespeichert sind, entweder direkt als Datum (Typ DateTime-Feld) oder als Datum mit kleiner Jahreszahl aber dem Wert Yearly auf true. Das sind die jährlichen Feiertage.
Ich muss nun anhand eines Datums prüfen, ob dieses dort drin ist. Mein SQL hätte ich jetzt wie folgt gemacht:

Code:
select holidayid from ocHolidays where (holiday = {d '2012-05-05'} and yearly = 0) or (datepart(holiday, m) = '5' and datepart(holiday, d) = '5' and yearly = 1)

nun habe ich zwei Probleme:
Die Meldung:
---------------------------
SQL-Fehler
---------------------------
Fehler: -2147217900
Quelle: Microsoft OLE DB Provider for SQL Server
Meldung: 'holiday' wird nicht als Option für datepart erkannt.

ADO Fehler:
-2147217900, Microsoft OLE DB Provider for SQL Server, 'holiday' wird nicht als Option für datepart erkannt.

Wollen Sie den SQL-Befehl ansehen?
---------------------------
Ja Nein
---------------------------


ausserdem stellt sich mir die Frage, ob das auch bei zweistelligen Monaten und Tagen klappt, denn im VB-Code muss ich ja auch DatePart verwenden:

Visual Basic:
  With thisQQ.DBSQL
    .DatabaseType = mConn.DatabaseType
    .sql = "select holidayid from ocHolidays where (holiday = "
    .AddDate mDate
    .Add " and yearly = "
    .AddLong 0
    .Add ") or (datepart(holiday, m) = "
    .AddString DatePart("m", mDate)
    .Add " and datepart(holiday, d) = "
    .AddString DatePart("d", mDate)
    .Add " and yearly = "
    .AddLong 1
    .Add ")"
  End With


Tatsächlich habe ich erstaunlich wenig zu diesem Fehler gefunden im Web.
Oder hat evtl. jemand eine elegantere Lösung, wie man das gewünschte rausfinden könnte?


Wie immer danke ich im Voraus für alle Antworten



Müller Matthias
 
Ich gehe davon aus, dass in ocHolidays eine Spalte "holiday" vorhanden ist.
DATEPART hat den Aufbau DATEPART(datepart,datetime).
Wenn Du DATEPART(holiday,d) angibst kann daraus nichts gefunden werden, denn datepart muss etwas wie "DAYOFYEAR","MONTH","DAY",... sein.
Deine Abfrage müsste sein: DATEPART(MONTH,holiday), also die Parameter vertauschen.
 
ja habs grad vorhin selber rausgefunden...
Manchmal programmiert man paar Stunden am Stück, dann passiert so was blödes einfach...

Naja trotzdem vielen Dank für die Antwort.


Matthias Müller
 

Neue Beiträge

Zurück