従業員が会社で働いている期間を調べようとしていますが、辞任したvarcharの値「2年-2月21日」をデータ型intに変換するときに変換に失敗しました
私は今このデータを持っていないので、データベースのこの列の値はNullです。しかし、私はそれが起こったときに自分のSQLで考える退職日の代わりに現在の時間しかし、今は仕事の開始日と現在の時間を取る。私の理論は、列の辞任日付がnullの場合、「現在の日付 - 仕事の開始日」をとり、それ以外の場合は 退職日 - 仕事の開始日。
私はこの理論のためのSQLクエリを書いて、それが正常に働いていますが、私が働いてどのくらいの従業員のための元年月日のリターンをしようとしたとき、私はある問題を抱えて:
A)私は、このエラーで苦戦しました時間と私はまた、これらの行を変換してみました、私はそのを変換する必要があると思ったが、私が私のメインのクエリを実行すると、私はこのエラーを取得し、とてもうまく働いていない:
> 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.
私のメイン・クエリは次のようになります。
**--- 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;
私は問題を特定するために、クエリを簡素化することをお勧め。 –
私はちょうど質問を編集しました。あなたが両方のケースで異なる結果を表示している理由を教えてください。 – RyaN
- 退職日がnullでない場合は、あなたがdatediffを使用していて、月と日を出力します。 –