View Full Version : میخواهم اطلاعات کسانی که تاریخ تولدشان از امروز تا 7 روز دیگه است نمایش داده شود
babak1
چهارشنبه 06 شهریور 1392, 13:20 عصر
سلام:
من این queryرو نوشتم ولی جواب نمیده !!
select ROW_NUMBER() over(order by id)as RowNo, * From Info where
(DATEPART(MM,MiladiBirthday)between (DATEPART(MM,Getdate()))and (DATEPART(MM,DATEADD(day,7,Getdate())))) AND
(DATEPART(DD,MiladiBirthday)between (DATEPART(DD,Getdate()))and (DATEPART(DD,DATEADD(day,7,Getdate()))))
sajadsobh
چهارشنبه 06 شهریور 1392, 15:28 عصر
من از این روش استفاده کردم:
DECLARE @count int
DECLARE @DateCol datetime
SELECT @DateCol = GETDate()
SET @count=1
WHILE (@count<=7)
BEGIN
SELECT * FROM BirthDate
WHERE ( DATEPART(yy,DateOfBirth)=DATEPART(yy,@DateCol) AND
DATEPART(mm,DateOfBirth)=DATEPART(mm,@DateCol) AND
DATEPART(dd,DateOfBirth)=DATEPART(dd,@DateCol))
SELECT @DateCol = DATEADD(dd,1,@DateCol)
SET @count=@count+1
END
محمد سلیم آبادی
پنج شنبه 07 شهریور 1392, 00:31 صبح
توجه: در جواب به پستی که بعدا حذف شد!
مساله چندان مفهوم نیست.
من کدتان را بررسی کردم. چطور شما برای کسی که هنوز بدنیا نیامده تاریخ تولید ثبت کردین؟!
منظور اینه که طرف قراره هفت روز دیگه بدنیا بیاد شما تاریخ تولدش را پیشا پیش ثبت کردین.
من اولش فکر کردم منظور شما اینه که اگر مثلا تاریخ تولید یک فردی 01-01-2001 بود و تاریخ امروز 01-01-2013 بود آنگاه سطر مربوطه انتخاب میشه. اما اینگونه نبود.
در هر حال کدتون را میتونید ساده تر کنید به این شکل:
select ROW_NUMBER() over(order by id)as RowNo, *
From BasijiInfo
where datediff(dd,0,MiladiBirthday) between DATEDIFF(dd, 0, getdate()) and DATEDIFF(dd, 0, getdate()) + 7
babak1
پنج شنبه 07 شهریور 1392, 00:47 صبح
من از این روش استفاده کردم:
DECLARE @count int
DECLARE @DateCol datetime
SELECT @DateCol = GETDate()
SET @count=1
WHILE (@count<=7)
BEGIN
SELECT * FROM BirthDate
WHERE ( DATEPART(yy,DateOfBirth)=DATEPART(yy,@DateCol) AND
DATEPART(mm,DateOfBirth)=DATEPART(mm,@DateCol) AND
DATEPART(dd,DateOfBirth)=DATEPART(dd,@DateCol))
SELECT @DateCol = DATEADD(dd,1,@DateCol)
SET @count=@count+1
END
اگه بخش مربوط به year رو حذف کنی کدت درست جواب میده.تست کردم.ممنون.
یعنی اینطوری :
DECLARE @count int
DECLARE @DateCol datetime
SELECT @DateCol = GETDate()
SET @count=1
WHILE (@count<=7)
BEGIN
SELECT * FROM BirthDate
WHERE ( DATEPART(mm,DateOfBirth)=DATEPART(mm,@DateCol) AND
DATEPART(dd,DateOfBirth)=DATEPART(dd,@DateCol))
SELECT @DateCol = DATEADD(dd,1,@DateCol)
SET @count=@count+1
END
چون قرار نیست سال تولد فرد با سال جاری مساوی باشه
babak1
پنج شنبه 07 شهریور 1392, 00:49 صبح
مساله چندان مفهوم نیست.
من کدتان را بررسی کردم. چطور شما برای کسی که هنوز بدنیا نیامده تاریخ تولید ثبت کردین؟!
منظور اینه که طرف قراره هفت روز دیگه بدنیا بیاد شما تاریخ تولدش را پیشا پیش ثبت کردین.
من اولش فکر کردم منظور شما اینه که اگر مثلا تاریخ تولید یک فردی 01-01-2001 بود و تاریخ امروز 01-01-2013 بود آنگاه سطر مربوطه انتخاب میشه. اما اینگونه نبود.
در هر حال کدتون را میتونید ساده تر کنید به این شکل:
select ROW_NUMBER() over(order by id)as RowNo, *
From BasijiInfo
where datediff(dd,0,MiladiBirthday) between DATEDIFF(dd, 0, getdate()) and DATEDIFF(dd, 0, getdate()) + 7
کد شما جواب نداد ولی بازم ممنون از توجهتون.
محمد سلیم آبادی
پنج شنبه 07 شهریور 1392, 00:54 صبح
کد شما جواب نداد ولی بازم ممنون از توجهتون.
کد من جواب نداد یا کد شما؟!
به پستی که حذف کردین توجه کنید:
جوابشو پیدا کردم :)
select ROW_NUMBER() over(order by id)as RowNo, * From BasijiInfo where
MiladiBirthday between (DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0))and
DATEADD(day,7,(DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)))
من تنها آن را ساده تر کردم و اشاره نیز داشتم که کد شما چه مشکلی داره. و عملا اشتباه هست.
fakhravari
پنج شنبه 07 شهریور 1392, 10:41 صبح
داش سلیم آبادی در مورد این تاریخ چطوری میشه؟
1390/12/12
1390/10/10
1370/11/10
1369/01/07
محمد سلیم آبادی
پنج شنبه 07 شهریور 1392, 13:51 عصر
منظورتون رو نگرفتم. پرسش تون رو شفافتر و دققتر بیان کنید.
fakhravari
پنج شنبه 07 شهریور 1392, 14:38 عصر
همان سوال دوستمون اما با تاریخ های شمسی
محمد سلیم آبادی
پنج شنبه 07 شهریور 1392, 19:38 عصر
منظورتون اینه که تاریخ ها را بصورت رشته ای از کاراکتر ذخیره کردین؟
این کار صحیح نیست. چون وظیفه اعمال Data Integrity نیز به عهده شما خواهد بود. ضمن اینکه نمیتونید از توابع تو کار (built-in) موجود در SQL Server در این مواقع استفاده کنید. و همچنین نمایش تاریخ به صورت های مختلف مثل: 21 فروردین 1392 به جای 1392/01/21 امکان پذیر نخواهد بود (همه این کارها را باید خودتان به عهده بگیرین)
به هر حال میتونید با کمک یک جدول که شامل تمام روز ها و ماه های یک سال است مساله رو حل کنید به این جدول اصطلاحا Calendar گفته میشه. لطفا در اینترنت جستجو کنید.
fakhravari
پنج شنبه 07 شهریور 1392, 21:04 عصر
http://barnamenevis.org/showthread.php?292039-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D9%85%DB%8C%D9%84%D8%A7%D8%AF%DB%8C-%D8%A8%D9%87-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AF%D8%B1-sql
توی پروژه ها میخواهم از این فرمت استفاده کنم.
1370/11/10
دردسرش کمتره
برای تبدیل از توابع بالا استفاده میکنم
pashna
شنبه 09 شهریور 1392, 21:20 عصر
سلام،
لطفا برای Performance بهتر از DATEADD بجای DATEDIFF استفاده کنید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.