Ich versuche herauszufinden, wie lange Mitarbeiter für das Unternehmen gearbeitet haben und ich sollte auch herausfinden, ob einer der Mitarbeiter ein Rücktrittsdatum haben.Konvertierung fehlgeschlagen beim Konvertieren des Varchar-Wertes '2 Jahr -2 Monat 21 Tage' in den Datentyp Int
Aber ich habe gerade keine Daten dafür, daher ist der Wert dieser Spalte in meiner Datenbank Null. Aber ich denke in meinem sql, wenn es passiert ist, nehmen Resignation Date statt der aktuellen Zeit aber jetzt nehmen Sie das Startdatum der Arbeit und die aktuelle Zeit. Meine Theorie ist, wenn die Spalte Resignation Datum ist Null, nehmen Sie "Aktuelles Datum - Arbeit Startdatum", sonst sollte es Rücktrittsdatum - Startdatum der Arbeit.
Ich schrieb eine SQL-Abfrage für diese Theorie und es funktioniert gut, aber wenn ich versuche Rückkehr für Ex Jahr Monat Tag für wie lange Arbeits Mitarbeiter habe ich ein Problem, das ist:
a) ich mit diesem Fehler rang nach Stunden und ich habe auch versucht, diese Zeilen zu konvertieren, ich dachte, seine umgewandelt werden sollte, aber es ist nicht gut so arbeiten, als ich meine Haupt-Abfrage ausführen, bekomme ich diesen Fehler:
> Msg 245, Level 16, State 1, Line 1
> Conversion failed when converting the varchar value '2 year -2 month 21 day' to data type int.
Meine Haupt Abfrage wie folgt aussieht:
**--- sql for how long employees work with year month day ----**
CASE
WHEN Users.ResignationDate IS NOT NULL
THEN DATEDIFF(YEAR, WorkStartDate, ResignationDate)
ELSE CAST(DATEDIFF(yy, WorkStartDate, GETDATE()) AS varchar(4)) + ' year ' +
CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate), GETDATE()) AS varchar(2)) + ' month ' +
CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate), GETDATE()), DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate)), GETDATE()) AS varchar(2)) +' day' END as Ancinitet,
Paychecks.DepartmentName AS Afdelinger
FROM dbo.Paychecks INNER JOIN dbo.Users ON Users.Id=Paychecks.UserId
WHERE Users.CustomerId=214 order by Users.FirstName;
Ich würde vorschlagen, die Abfrage zu vereinfachen, das Problem zu isolieren. –
ich habe gerade die Abfrage bearbeitet, bitte sehen Sie, wenn nicht ok, sagen Sie mir – RyaN
warum Sie unterschiedliche Ergebnisse für beide Fälle zeigen - Wenn das Rücktrittsdatum nicht null ist, verwenden Sie datediff und wenn null ist, dann fügen Sie Jahr hinzu, Monat und Tage in Ihrer Ausgabe. –