50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

تهاتر دو فیلد زمان (time 7) در sql 2012

سلام خدمت تمامی اساتید و مهندسین عزیز :

فرض کنید 2 فیلد در جداول خود با نوع (time 7) داریم - فیلد اول بنام EzafeKar - فیلد دوم بنام KasreKar

عملیاتی که میخوام انجام بشه مجموع کسرکار یک فرد از مجموع اضافه کار این شخص کسر بشه (تهاتر) ==> ( TotalKasrKar- TotalKasrKar)

واقعا ممنون و متشکرم

پرسیده شده در 1396/07/03 توسط

5 پاسخ

1

مثل همیشه عالی مهندس و کاملا بدون باگ اجرا و نتیجه دقیقا برابر همون چیزی بود که مورد نظر یود.

بی نهایت سپاسگزارم جناب احمدی

پاسخ در 1396/07/04 توسط
0

ممنون جناب احمدی : ببینید مهندس این کد من هست که مجموع اضافه کارها و کسر کارهای هر شخص رو بدست میارم

با قالب :(HH:MM:SS)

ممنون جناب احمدی : ببینید مهندس این کد من هست که مجموع اضافه کارها و کسر کارهای هر شخص رو بدست میارم
با قالب :(HH:MM:SS)
||https://programming.tosinso.com/files/get/070d4e94-76c7-4174-8ced-927c07c1463d||

من میخوام تفاضل مجموع  کسر کارهای هر شخص از مجموع اضافه کارهای همون شخص رو بدست بیارم ولی در قالب (HH:MM:SS)

این دستورات من هستند :

ممنون میشم کمکم کنید
<sql>
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

<sql>

من میخوام تفاضل مجموع کسر کارهای هر شخص از مجموع اضافه کارهای همون شخص رو بدست بیارم ولی در قالب (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

پاسخ در 1396/07/04 توسط
0

برای بدست آوردن تفاضل دو مقدار بر اساس 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
پاسخ در 1396/07/04 توسط
0

ممنون جناب احمدی : ببینید مهندس این کد من هست که مجموع اضافه کارها و کسر کارهای هر شخص رو بدست میارم

با قالب :(HH:MM:SS)

ممنون جناب احمدی : ببینید مهندس این کد من هست که مجموع اضافه کارها و کسر کارهای هر شخص رو بدست میارم
با قالب :(HH:MM:SS)
||https://programming.tosinso.com/files/get/070d4e94-76c7-4174-8ced-927c07c1463d||

من میخوام تفاضل مجموع  کسر کارهای هر شخص از مجموع اضافه کارهای همون شخص رو بدست بیارم ولی در قالب (HH:MM:SS)

این دستورات من هستند :

ممنون میشم کمکم کنید
<sql>
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

<sql>

من میخوام تفاضل مجموع کسر کارهای هر شخص از مجموع اضافه کارهای همون شخص رو بدست بیارم ولی در قالب (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

پاسخ در 1396/07/04 توسط
1

سلام و عرض ادب، شما با ترکیب توابع 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
پاسخ در 1396/07/04 توسط

پاسخ شما