2017-03-23 7 views
-1

Ich habe folgendes Problem:Abfrage zwischen zwei Datumsfeldern und zwei eingegebenen Terminen

, wenn der Benutzer zum Beispiel Mitarbeiter Urlaubszeit von drei Tagen eingeben beginnt zum Beispiel 29/04/2017 endet 02/05/2017 (Datum Rückkehr zum Büro) zugleich der Angestellte hat den Urlaub beantragt hat bereits einen Urlaub in der Tabelle gespeichert. (Feld Startdatum 01/05/2017 & Feld Enddatum 04/05/2017
was ich will ist eine Abfrage, die von den eingegebenen Urlaub stört (bedeutet nicht wollen, dass der Benutzer irgendwelche Daten, dass wurde vor den gespeicherten verwendet Ich habe Folgendes versucht und funktioniert gut

diese Abfrage sehr gut mit allen verwendeten Daten arbeitet wie

28/04/2017 to 02/05/2017 query shows the date used (01/05/2017 to 04/05/2014) 

29/04/2017 to 03/05/2017 query shows the date used (01/05/2017 to 04/05/2014) 

01/05/2017 to 02/05/2017 query shows the date used (01/05/2017 to 04/05/2014) 

02/05/2017 to 04/05/2017 query shows the date used (01/05/2017 to 04/05/2014) 

01/05/2017 to 03/05/2017 query shows the date used (01/05/2017 to 04/05/2014) 

01/05/2017 to 04/05/2017 query shows the date used (01/05/2017 to 04/05/2014) 

aber wenn der Benutzer ein Datum wie

02/05/2017 bis 03/05/2017

Abfrage eingeben zeigt nichts und der Urlaub wird angenommen, was in der Tat nicht erlaubt ist, weil der Mitarbeiter bereits in einem Urlaub

die Abfrage, die ich verwende

SELECT TblEmpVacation.*, TblVacations.VacationName, tblEmployees.Emp_Name, TblEmpVacation.DateStart, TblEmpVacation.DateEnd 
FROM tblEmployees INNER JOIN (TblVacations INNER JOIN TblEmpVacation ON TblVacations.VacationCode = TblEmpVacation.VacationNO) ON tblEmployees.Emp_ID = TblEmpVacation.EmpNo 
WHERE tblEmployees.Emp_Name="Khaled Eissa" AND TblEmpVacation.DateStart Between 5/2/2017 And 5/3/2017 AND TblEmpVacation.DateStart<>5/2/2017 
UNION 
SELECT TblEmpVacation.*, TblVacations.VacationName, tblEmployees.Emp_Name, TblEmpVacation.DateStart, TblEmpVacation.DateEnd 
FROM tblEmployees INNER JOIN (TblVacations INNER JOIN TblEmpVacation ON TblVacations.VacationCode = TblEmpVacation.VacationNO) ON tblEmployees.Emp_ID = TblEmpVacation.EmpNo 
WHERE tblEmployees.Emp_Name="Khaled Eissa" AND TblEmpVacation.DateEnd Between 5/2/2017 And 5/3/2017 AND TblEmpVacation.DateEnd<>5/3/2017 

jede Hilfe

enter image description here

+0

Keine Ahnung, was Ihre Frage ist. Was ist deine Frage? – Hogan

+0

Ich denke, Sie müssen 'to_char' Methode verwenden, um Zeichenfolge zu Datum in der' WHERE'-Klausel zu konvertieren – Pons

+0

siehe bearbeitete Frage und werfen Sie einen Blick auf die Tabellen Bild –

Antwort

0

hier ist das, was ich jemand nur für den Fall zu tun hatte, könnte vor dem gleichen Problem

da alle Termine durch die obige Abfrage erfasst werden können außer denen, die zwischen Datum & dateend

kommt so nach der oben genannten Abfrage hatte ich excute folgenden:

SELECT TblEmpVacation.*, TblVacations.VacationName, tblEmployees.Emp_Name, TblEmpVacation.DateStart, TblEmpVacation.DateEnd 
FROM (tblEmployees INNER JOIN TblEmpVacation ON tblEmployees.Emp_ID = TblEmpVacation.EmpNo) INNER JOIN TblVacations ON TblEmpVacation.VacationNO = TblVacations.VacationCode 
WHERE (((tblEmployees.Emp_Name)="Khaled Eissa") AND ((TblEmpVacation.DateStart)<#5/2/2017#) AND ((TblEmpVacation.DateEnd)>#5/3/2017#)); 

das ist, was ich tun musste, wenn nicht anders habt euch eine sehr Voraus Abfrage

getan werden kann

dank jedem, wie

Verwandte Themen