با عرض سلام و خسته نباشید
من مقدار 2 فیلد با رکوردهای زیادی را که زمان شروع و پایان رو نشون میده، چطوری میتونم بفهمم که از این بازده زمانی چند روزش قبل و چند روزش بعد از یک تاریخ خاصه
مثلا تاریخ شروع :22/12/91
تاریخ پایان : 15/03/92
تاریخ خاص :10/2/92
ضمناً مقدار ها در بانک SQL SEVER از نوع nvarchar است .
ممنون میشم کمکم کنید
با شرط برای sql محقق میگردد
موفق باشید
با سلام
اگه میشه بیشتر راهنمایی کنید
من میخوام بفهمم چند روزش قبل تاریخ خاص و چند روزش بعد تاریخ خاصه
تعداد رکوردها هم زیاده
ممنون
به کمک این دستورها میتونید اخلاف تاریخ را بدست بیاری
کد:
DateTime DateTime1 = new DateTime();
DateTime DateTime2 = new DateTime();
DateTime dt3 = new DateTime();
DateTime1 = DateTime.Now;
DateTime2 = DateTime.Parse("2004/11/21 01:28:31");
TimeSpan Difrence = DateTime1 - DateTime2;
MessageBox.Show(Difrence.Days.ToString() + "تفاوت روز");
من داخل بانکم مدت کار همه پرسنل رو ذخیره میکنم مثلا آقای محمدی چند رکورد داره که یکیش از تاریخ 20/5/91 شروع به کار کرده و تاریخ پایان کارش 12/11/91 بوده است طبق ابلاغیه حقوق روزانه از تاریخ 1/9/91 تغییر کرده و میخوام بدونم که چطوری این رو بنویسم که بفهمه کارکرد نفر چند روز قبل از این ابلاغیه و چند روز بعد از این ابلاغیه بوده است (تاریخ ابلاغیه وسط یکی از بازده ها قرار گرفته است )
ضمناً تاریخ های داخل بانک SQL SERVER از نوع nvarchar است .
![[تصویر: 99220724702422970181.jpg]](http://www.8pic.ir/images/99220724702422970181.jpg)
سلام
یکی کمکم کنه ، ممنون میشم
اگر درست متوجه شده باشم شما میخواهید یک بار حقوق کارمند را تاقبل از ابلاغ و یکبار از ازمان ابلاغ تا زمان جاری محاسبه کنید
برای اینکار اول با دستوری که گفتم اختلاف شروع تا ابلاغ را حساب کنید بعد در دستمزد روزانه ضرب کنید
دوباره از زمان ابلاغ تا زمان جاری(اخرین تاریخ که دارید)محاسبه کنید که چند روز میشود بعد ضرب کنید و محاسبه کنید
البته یه نکته ای که داره شما برای اینکه از این توابع برای اختلاف استفاده کنید باید تاریخ های خودتون را هربار به میلادی تبدیل کنید و محاسبه کنید!
نوع بانک نوع ذخیره شدنش در بانک هیچ تاثیری روی عملکرد ندارد!
موفق باشید
ممنون از کمکتون
چندین رکورد رو باید اینطوری حساب کنم و تعداد روز رو بدست بیارم یه کدی باید بنویسم که مشترک باشه بعضی از بازده های زمانی شروع و پایان قبل از تاریخ ابلاغه و بعضی از بازده های زمانی شروع و پایان بعداز تاریخ ابلاغه و بعضی از بازده های زمانی شروع قبل از تاریخ ابلاغیه و پایان بعداز تاریخ ابلاغه است .
چطوری چند رکورد رو حساب کنم هر کار میکنم فقط یه رکورد اول رو حساب میکنه
اگه میشه یه سورس کد بهم بدید .
با تشکر
(۲۵-مرداد-۱۳۹۲, ۲۲:۱۹:۵۳)doooste_2002 نوشته است: [ -> ]ممنون از کمکتون
چندین رکورد رو باید اینطوری حساب کنم و تعداد روز رو بدست بیارم یه کدی باید بنویسم که مشترک باشه بعضی از بازده های زمانی شروع و پایان قبل از تاریخ ابلاغه و بعضی از بازده های زمانی شروع و پایان بعداز تاریخ ابلاغه و بعضی از بازده های زمانی شروع قبل از تاریخ ابلاغیه و پایان بعداز تاریخ ابلاغه است .
چطوری چند رکورد رو حساب کنم هر کار میکنم فقط یه رکورد اول رو حساب میکنه
اگه میشه یه سورس کد بهم بدید .
با تشکر
خواهش میکنم
پیشنهاد میکنم یه تابع درست کنید دوتا تاریخ را بگیره و اختلاف را بهتون برگدرونه تا از تکرار محاسبه کمتر بشه!
برای اینکه همه رکوردها برسی بشه فقط کافیه یک ححلقه استفاده کنید تا تک تک رکوردهارا برسی کنه و مقادیرش را بدست بیاره واستون!
سلام
من قبلا همچین موردی کارکرده بودم (ولی نمیدونم سورساشو کجا گذاشتم )در کل روال به این صورت بود :
اول اینکه باید نوع تاریخ هاتونو یک شکل باشه یعنی همشون 10 کاراکتری 1392/05/27
یه جدول ساختم به این ساختار :
کد:
CREATE TABLE [dbo].[tbls](
[EmId] [varchar](50) NULL,
[Indate] [varchar](10) NULL,
[OuteDate] [varchar](10) NULL
) ON [PRIMARY]
بعد این کوئری رو روش اجرا کردم :
کد:
DECLARE @executeDate VARCHAR(10)='1392/01/02'
SELECT TOP 1000 [EmId]
,[Indate]
,[OuteDate]
,dbo.DiffDate(Indate,outeDate)AS ekh1
,0 ekh2
FROM [tbls]
WHERE OuteDate<@executeDate
UNION ALL
SELECT *,dbo.DiffDate(Indate,@executeDate)AS ekh1,dbo.DiffDate(@executeDate,outeDate)AS ekh2 FROM tbls
WHERE indate <@executeDate and outedate> @executeDate
UNION ALL
SELECT *,0 ekh1,dbo.DiffDate(Indate,outeDate)AS ekh2 FROM tbls
WHERE indate >@executeDate
و تابعی که اختلاف رو محاسبه میکنه در این پست توضیح دادم :
آیا میدانید SQL ای
و حاصل شده این که ستون اول تعداد روز های کارکرد قبل از تاریخ اعمال و ستون دوم تعداد روز های کار کرد بعد از تاریخ اعمال
[
attachment=10036]