PDA

View Full Version : کم کردن 2 فیلد تاریخ از هم در یک کد



taknavaz123
سه شنبه 01 اردیبهشت 1394, 09:26 صبح
با سلام خدمت دوستان
یه کمک نیاز داشتم.
در کد زیر دوتا فیلد end_date و start_date هست که بعنوات تاریخ تولید و تاریخ انقضای محصول هستند.
حالا میخواستم این 2 تا تاریخ (شمسی) رو از هم کم کنم و در یک فیلد دیگر به نام طول عمر نمایش بدم.ولی نمیدونم چطوری و کجای این کد باید بنویسمش








Declare @Fact_Date char(8) --param Tarikh ;=;1
Declare @Stock_Cd TinyInt ,@Stock_Cd2 TinyInt --param ANbar;between
Declare @GROUPOD_CD Smallint,@GROUPOD_CD2 Smallint -- param goroh;between
Declare @OD_CD Varchar(17),@OD_CD2 Varchar(17) --param kala ;between
Declare @ACC_YEAR Int --param sal;=;1

/* begin user parameter value */
Set @acc_year = 1394
/* end of user parameter value */



Select Od_Cd,Od_Nm,Unit_Nm,Stock_Cd,Stock_Nm,Sefaresh,sum _io_quantity,sum_io_quantity_un_prc,Vazn_kol,End_D ate,start_date
,CASE WHEN ISNULL(sum_io_quantity,0)=0 THEN 0 ELSE ISNULL(sum_io_quantity_un_prc,0)/ISNULL(sum_io_quantity,0) END Un_Prc
from
(
Select A.Od_Cd, A.Od_Nm, A.Unit_Nm, A.Stock_Cd, A.Stock_Nm,Sefaresh,a.End_Date,a.start_date
,sum(Io*Quantity) sum_io_quantity
,Sum(Io*Prc_Kol) sum_io_quantity_un_prc
,Sum(Io*Quantity*unitVazn)/1000 Vazn_kol
FROM S_Vw_Article A
Where (A.Acc_Year = @Acc_Year)
And (@Fact_Date Is Null Or A.Fact_Date<=@Fact_Date)
And (
(@Stock_cd Is Null)
Or((@Stock_cd = @Stock_cd2) And (Stock_cd=@Stock_cd))
Or((@Stock_cd <>@Stock_cd2) And (Stock_cd Between @Stock_cd And @Stock_cd2))
)
And (
(Not A.Flag In(2,4,12,17)) OR ((Flag=2 AND Vazeiat=1) OR(Flag=4 AND Id_Source Is Null) OR (Flag=12 AND Vazeiat=1) OR(Flag=17 AND Id_Source Is Null))
)
GROUP BY A.Od_Cd, A.Od_Nm,A.Unit_Nm,A.Stock_cd,A.Stock_Nm,Sefaresh,a .End_Date,a.start_date
) L

Order By L.Stock_cd,L.Od_Cd

Todco.ir
سه شنبه 01 اردیبهشت 1394, 09:41 صبح
با سلام.
دوست عزیز لطفا کدتونو داخل قسمت SQL قرار دهید تا منظم نوشته شود

taknavaz123
چهارشنبه 02 اردیبهشت 1394, 08:51 صبح
دوستان ممنون میشم کمک کنید

SabaSabouhi
چهارشنبه 02 اردیبهشت 1394, 10:08 صبح
دوستان ممنون میشم کمک کنید

سلام
متاسفانه شما خشت اول رو کج گذاشتی، نگه‌داری تاریخ به صورت شمسی ( رشته‌ی حرفی ) کاملاً اشتباه هست.
تاریخ همیشه باید تاریخ باشه ( DateTime یا Date ) ، برای نمایش به صورت شمسی می‌تونی از تابعی که من اخیراً تو تالار T-Sql گذاشتم استفاده کنی.
با این کار به راحتی می‌تونی دو تاریخ رو با تابع DATEDIFF از هم کم کنی.

صبا صبوحی

taknavaz123
چهارشنبه 02 اردیبهشت 1394, 22:53 عصر
سلام
متاسفانه شما خشت اول رو کج گذاشتی، نگه‌داری تاریخ به صورت شمسی ( رشته‌ی حرفی ) کاملاً اشتباه هست.
تاریخ همیشه باید تاریخ باشه ( DateTime یا Date ) ، برای نمایش به صورت شمسی می‌تونی از تابعی که من اخیراً تو تالار T-Sql گذاشتم استفاده کنی.
با این کار به راحتی می‌تونی دو تاریخ رو با تابع DATEDIFF از هم کم کنی.

صبا صبوحی


ممنون از راهنمایتون.خب تایپ اون تا فیلدها رو عوض میکنم.میذارم روی date.
ولی نمیدونم چه جوری باید اون کد مربوط به کسر تاریخ رو بنویسم.یعنی کجای این کد بالا باید بذارمش تا start_date رو از end_date کم کنه.
میشه راهنمائی کنید؟

SabaSabouhi
پنج شنبه 03 اردیبهشت 1394, 09:00 صبح
ممنون از راهنمایتون.خب تایپ اون تا فیلدها رو عوض میکنم.میذارم روی date.
ولی نمیدونم چه جوری باید اون کد مربوط به کسر تاریخ رو بنویسم.یعنی کجای این کد بالا باید بذارمش تا start_date رو از end_date کم کنه.
میشه راهنمائی کنید؟

سلام
اگه تاریخ رو میلادی کنی، دیگه مشکلی نیست. به راحتی از تابع سیستمی DATEDIFF می‌تونی استفاده کنی. تو همون select این عبارت
رو اضافه کن:


, DATEDIFF( d, start_date, end_date ) as lifeTime


به همین سادگی

صبا صبوحی

taknavaz123
پنج شنبه 03 اردیبهشت 1394, 10:51 صبح
سلام
اگه تاریخ رو میلادی کنی، دیگه مشکلی نیست. به راحتی از تابع سیستمی DATEDIFF می‌تونی استفاده کنی. تو همون select این عبارت
رو اضافه کن:


, DATEDIFF( d, start_date, end_date ) as lifeTime


به همین سادگی

صبا صبوحی

ممنون از راهنمائی.
حالا چه جوری شمسیش بکنم؟
ممنون میشم باز راهنمائی کنید

SabaSabouhi
جمعه 04 اردیبهشت 1394, 12:30 عصر
ممنون از راهنمائی.
حالا چه جوری شمسیش بکنم؟
ممنون میشم باز راهنمائی کنید

سلام
اگه پست قبلی من رو درست خونده بودی، پاسخ رو همون‌جا پیدا می‌کردی.
من برات نوشته بودم که تابع مناسب رو به همین تالار فرستادم. جستجو کنی پیداش می‌کنی. از من آدرسش رو نخواه چون من هم اگه
بخوام پیداش کنم باید جستجو کنم.
تابع من تو تمام دامنه تعریف تست شده و بسیار هم سریع هست.

صبا صبوحی