تهاتر دو فیلد زمان (time 7) در sql 2012
سلام خدمت تمامی اساتید و مهندسین عزیز :
فرض کنید 2 فیلد در جداول خود با نوع (time 7) داریم - فیلد اول بنام EzafeKar - فیلد دوم بنام KasreKar
عملیاتی که میخوام انجام بشه مجموع کسرکار یک فرد از مجموع اضافه کار این شخص کسر بشه (تهاتر) ==> ( TotalKasrKar- TotalKasrKar)
واقعا ممنون و متشکرم
5 پاسخ
مثل همیشه عالی مهندس و کاملا بدون باگ اجرا و نتیجه دقیقا برابر همون چیزی بود که مورد نظر یود.
بی نهایت سپاسگزارم جناب احمدی
ممنون جناب احمدی : ببینید مهندس این کد من هست که مجموع اضافه کارها و کسر کارهای هر شخص رو بدست میارم
با قالب :(HH:MM:SS)
من میخوام تفاضل مجموع کسر کارهای هر شخص از مجموع اضافه کارهای همون شخص رو بدست بیارم ولی در قالب (HH:MM:SS)
این دستورات من هستند :
ممنون میشم کمکم کنید
USE [Kark] GO SELECT (cast(sum(datediff(second,0,TotalTimeAdiKarkard))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalTimeAdiKarkard))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalTimeAdiKarkard))%60 as varchar(2)),2)) as TotalAdi , (cast(sum(datediff(second,0,TotalEzafeKar))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalEzafeKar))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalEzafeKar))%60 as varchar(2)),2)) as TotalEzafeKar , (cast(sum(datediff(second,0,TotalKasreKar))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalKasreKar))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalKasreKar))%60 as varchar(2)),2)) as TotalKasreKar FROM [dbo].[TblKarkard] GO
برای بدست آوردن تفاضل دو مقدار بر اساس time باید تفاضل رو بر اساس ثانیه بدست بیارید و بعد بوسیله دستور زیر مقدار بدست اومده رو تبدیل به time کنید:
SELECT CONVERT(varchar, DATEADD(ms, 121 * 1000, 0), 114)
تو کد بالا 121 مقدار ثانیه مورد نظر هست که با توجه به کوئری شما به صورت زیر کوئری رو تغییر بدید نتیجه مورد نظر براتون ایجاد میشه، البته بنده بانک شما رو نداشتم که تست کنم، شما کوئری رو تست کنید ببینید خطا داره یا خیر:
select TotalAdi, TotalEzafeKar, TotalKasreKar, convert(varchar,dateadd(ms,(datediff(second,'00:00:00',TotalKasreKar)-datediff(second,'00:00:00',TotalEzafeKar))*1000,0),114) Diff from (SELECT (cast(sum(datediff(second,0,TotalTimeAdiKarkard))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalTimeAdiKarkard))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalTimeAdiKarkard))%60 as varchar(2)),2)) as TotalAdi , (cast(sum(datediff(second,0,TotalEzafeKar))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalEzafeKar))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalEzafeKar))%60 as varchar(2)),2)) as TotalEzafeKar , (cast(sum(datediff(second,0,TotalKasreKar))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalKasreKar))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalKasreKar))%60 as varchar(2)),2)) as TotalKasreKar FROM [dbo].[TblKarkard]) tbl
ممنون جناب احمدی : ببینید مهندس این کد من هست که مجموع اضافه کارها و کسر کارهای هر شخص رو بدست میارم
با قالب :(HH:MM:SS)
من میخوام تفاضل مجموع کسر کارهای هر شخص از مجموع اضافه کارهای همون شخص رو بدست بیارم ولی در قالب (HH:MM:SS)
این دستورات من هستند :
ممنون میشم کمکم کنید
USE [Kark] GO SELECT (cast(sum(datediff(second,0,TotalTimeAdiKarkard))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalTimeAdiKarkard))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalTimeAdiKarkard))%60 as varchar(2)),2)) as TotalAdi , (cast(sum(datediff(second,0,TotalEzafeKar))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalEzafeKar))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalEzafeKar))%60 as varchar(2)),2)) as TotalEzafeKar , (cast(sum(datediff(second,0,TotalKasreKar))/3600 as varchar(12)) + ':' + right('0' + cast(sum(datediff(second,0,TotalKasreKar))/60%60 as varchar(2)),2) + ':' + right('0' + cast(sum(datediff(second,0,TotalKasreKar))%60 as varchar(2)),2)) as TotalKasreKar FROM [dbo].[TblKarkard] GO
سلام و عرض ادب، شما با ترکیب توابع datediff و sum می تونید خروجی مورد نظرتون رو بگیرید، فرض کنید کد پرسنلی در ستونی به نام Code ذخیره شده و نام جدول هم Table هست:
select SUM(Convert(int,datediff(minute,'00:00:00',EzafeKar)))-sum(Convert(int,datediff(minute,'00:00:00',KasreKar))) from Table where code = 1