View Full Version : کوری برای محاسبه تفاضل دو تاریخ از نوع NVARCHAR
NasimBamdad
شنبه 11 آذر 1391, 10:29 صبح
سلام و خسته نباشید .
مشکل جدیدی بر خوردم که باز دست به دامان BarnameNevis شدم .
من 2 تا فیلد دارم که تاریخ شمسی رو از نوع NvarCHar می باشند
مثلا این فرمت
rdate , bdate
1391/05/09
حالا من می خوام ببینم راهی هست که تفاضل بین 2 تاریخ رو بدست بیارم ؟
مثلا این 2 تاریخ رو ببینید . :
1391/05/09 و 1345/06/24
اولی سن یک شخص هست و دومی تاریخ روز هست . مثلا . !!
من می خواهم سن این شخص رو بدست بیارم . به طوری که 4 رقم اول که نماینده سن شخص هست رو از سال (1391 ) کم کنم که سن بدست بیاد این طوری
1345 - 1391
می خوام با SQL انجام بدم . از چه دستوری استفاده کنم که خروجی رو در یک فیلد از نوع int بنویسم ؟
cherchil_hra
شنبه 11 آذر 1391, 10:40 صبح
DECLARE @MinDate AS CHAR(10),@MaxDate CHAR(10)
SET @MaxDate='1391/05/09'
SET @MinDate='1345/06/24'
SELECT CAST(SUBSTRING(@MaxDate,1,4)AS INT)-CAST(SUBSTRING(@MinDate,1,4)AS INT)
موفق باشید!
NasimBamdad
شنبه 11 آذر 1391, 11:51 صبح
DECLARE @MinDate AS CHAR(10),@MaxDate CHAR(10)
SET @MaxDate='1391/05/09'
SET @MinDate='1345/06/24'
SELECT CAST(SUBSTRING(@MaxDate,1,4)AS INT)-CAST(SUBSTRING(@MinDate,1,4)AS INT)
موفق باشید!
ممنونم دوست عزیز . خیلی لطف کردید . حالا یه سوال دیگه دارم .
من چه طوری این مقدار MaxDate , MinDate رو برابر با مقادیر فیلد های جدولم کنم . من همچین چیزی نیاز دارم
Update Patients SET age = RDATE - BDATE
RDATE و BDATE دو فیلد از جدولم هستند که از نوع NVARCHAR هستند .
ممنونم !
NasimBamdad
شنبه 11 آذر 1391, 12:02 عصر
همچین کدی رو پیدا کردم و کار می کنه .
DECLARE @MinDate AS CHAR(10),@MaxDate CHAR(10)
Select @MinDate = birthday,@MaxDate = reg_tarikh_shamsi from patients
SELECT CAST(SUBSTRING(@MaxDate,1,4)AS INT)- CAST(SUBSTRING(@MinDate,1,4)AS INT) AS AGE
اما فقط و فقط و فقط برای اولین رکورد جدولم حساب می کنه . چه طوری تغییرش بدم طوری که نتیجه رو برای تمامی رکورد های جدولم اعمال کنم ؟ یعنی یع چیزی تو مایه های حلقه FOR
NasimBamdad
شنبه 11 آذر 1391, 12:05 عصر
یه کدی مثل این نیاز دارم .
DECLARE @MinDate AS NVARCHAR(50),@MaxDate NVARCHAR(50)
Select @MinDate = birthday,@MaxDate = reg_tarikh_shamsi From patients WHERE id
SELECT CAST(SUBSTRING(@MaxDate,1,4)AS INT) - CAST(SUBSTRING(@MinDate,1,4)AS INT) AS AGE_Total
Update patients set age = AGE_Total
در واقع می خواهم حاصل اون تفاضل که به لیبل AGE_Total الان داره نمایش داده میشه رو در فیلد age در جدول patients قرار بدم ( Update کنم ) . . این کار برای هر سطر از جدولم انجام بشه و نتیچه بره تو فیلد age
baktash.n81@gmail.com
شنبه 11 آذر 1391, 12:38 عصر
اینجوری ...
Update patients set age = cast(substring(reg_tarikh_shamsi,1,4)as int)-cast(substring(birthday,1,4)) as int
NasimBamdad
شنبه 11 آذر 1391, 16:31 عصر
اینجوری ...
Update patients set age = cast(substring(reg_tarikh_shamsi,1,4)as int)-cast(substring(birthday,1,4)) as int
واقعا لطف کردید و کارم راه افتاد . مرسی .
فقط یک Syntax اررور دارید که اونم حتما عجله داشتید . مرسیییییییییییییییی
می نویسم که دوستان هم استفاده کنند
Update patients set age = cast(substring(reg_tarikh_shamsi,1,4)as int)-cast(substring(birthday,1,4) as int)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.