ورود

View Full Version : تاریخ روز جاری درصورت NULL بودنSD در DIFFDATE('d',Now,SD)



hp1361
دوشنبه 11 مهر 1390, 11:18 صبح
با سلام

قبل از هر چیز اصلاح میکنم که منظور من DateDiff هستش که اشتباها نوشتم DiffDate

من بانکی تعریف کردم که فیلدی بنام SD با نوع TDateTime داره.مقدار پیش فرض SD رو NULL تعریف کردم چرا که باید بعد از اولین استفاده تاریخ اون روز داخلش درج بشه.

برای انتخاب رکوردها طبق الگوریتمم باید از شرط زیر استفاده کنم

DateDiff('d',Now,SD)=ParamX

'd'=محاسبه اختلاف بر اساس روز
Now=روز جاری سیستم
SD=تاریخ اولین استفاده
ParamX=یک عدد


مشکل من اینجاست که در نوبت اول مراجعه به بانک مقدار SD بصورت پیش فرض Null بوده و تا انتخاب زمانیکه انتخاب نگردد و استفاده نشود مقداری در اون قرار نخواهد گرفت بنابراین تابع DiffDate چیزی بر نمیگردونه و من جواب رو نمی تونم با ParamX مقایسه کنم.

***آیا راهی هست که درون کد SQL مشخص کنیم در صورت Null بودن ، تاریخ روز جاری رو بجای SD در نظر بگیره؟***

ممنون

mehran_sh_t
دوشنبه 11 مهر 1390, 11:41 صبح
با if این کار رو بکنید، TSQL هم دارای دستورات شرطی هستش.

hp1361
دوشنبه 11 مهر 1390, 11:49 صبح
سلام

منظور من استفاده از T-SQL بود. ممنون میشم نمونه کدی بزارین

hp1361
دوشنبه 11 مهر 1390, 12:15 عصر
سلام مجدد

در SQL SERVER تابعی داریم بنام ISNULL که به شکل زیر بکار میره

ISNULL (check_expression ,replacement_value )

یعنی مقدار check_expression رو چک میکنه و در صورت NULL بودن مقدار replacement_value رو بر میگردونه در غیر اینصورت همان مقدار فیلد بازگشت داده خواهد شد.

تا اینجای کار رو میدونستم اما مشکل این بود که وقتی در دلفی از این کد استفاده می کردم ارور میداد!
دلیلش هم این بود که من بانکم Access بود و در اکسس دستور ISNULL بصورت IsNull(expression) استفاده میشه و تنها مقدار Boolean بر میگردونه!

بعد از گشتی در دنیای وب فهمیدم expression.Nz(Value, ValueIfNull) در اکسس مترادف ISNULL در SQL SERVER هستش!

اما حالا توی دلفی ارور میده که NZ رو نمیشناسم!!! البته توی اکسس کوئری رو مستقیم مینویسم جواب میده!

چاره ی کار چیه؟

موفق باشیم

یوسف زالی
دوشنبه 11 مهر 1390, 16:23 عصر
سلام.
coalesce رو می شناسه؟
case رو چطور؟
coalesce(Val1, Val2) -- test
case Val1 when NULL then Val2 else Val1 end

hp1361
سه شنبه 12 مهر 1390, 00:49 صبح
سلام

ممنون از جوابتون

من از کد زیر استفاده کردم اما جواب نداد!

SELECT Word FROM Table1 WHERE (DATEDIFF("d",Now(),COALESCE(SD,Now()))=0)

ارورUnSpecified Error رو میده!البته توی دلفی که به بانک اکسس وصل میشم

hp1361
شنبه 16 مهر 1390, 14:30 عصر
سلام

خودم موفق به پیدا کردن جواب شدم

اینم دستور درست
SELECT Word FROM Table1 WHERE DATEDIFF("D",IIF(ISNULL(SD),Now(),SD),Now())=0

منبع (http://www.delphifeeds.com/go/s/11832)

موفق باشیم