ورود

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)