PDA

View Full Version : سلکت براساس تاریخ و ساعت



bitcob589
سه شنبه 09 خرداد 1391, 15:27 عصر
با سلام
چگونه می توان دستوری نوشت که سلکت را براساس تاریخ و زمان انجام شود در دیتابیس یک فیلد است که درآن تاریخ و ساعت ذخیره شده است رکودهای را سلکت کند تاریخ و ساعت آنها از زمان فعلی نگذشته باشد

در نظر بگیرید زمان فعلی ساعت 4 عصر 10 خردادماه است رکودهای را سلکت کند که از ساعت آنها از ساعت 4 بیشتر و تاریخ 10 خردادماه بیشتر باشد و رکوردهای که قبل از ساعت 4 باشد سلکت نکند

ali_sadri
سه شنبه 09 خرداد 1391, 15:33 عصر
سلام
میشه لطفا بیشتر توضیح بدهید ساعت آن نگذشته باشد یعنی چه منظورت اینه که ساعت 3 در لیست بیاید یا ساعت 5

ARC
سه شنبه 09 خرداد 1391, 15:51 عصر
با سلام
چگونه می توان دستوری نوشت که سلکت را براساس تاریخ و زمان انجام شود در دیتابیس یک فیلد است که درآن تاریخ و ساعت ذخیره شده است رکودهای را سلکت کند تاریخ و ساعت آنها از زمان فعلی نگذشته باشد

در نظر بگیرید زمان فعلی ساعت 4 عصر 10 خردادماه است رکودهای را سلکت کند که از ساعت آنها از ساعت 4 بیشتر و تاریخ 10 خردادماه بیشتر باشد و رکوردهای که قبل از ساعت 4 باشد سلکت نکند
با تابع GetDate() تاریخ و زمان همون لحظه رو میتونی بگیری و یک مقایسه انجام بدی. البته به شرطی که تاریخ رو به میلادی ذخیره کرده باشی.
نوع فیلد تاریخ رو چی قرار دادین؟

bitcob589
سه شنبه 09 خرداد 1391, 16:01 عصر
سلام
میشه لطفا بیشتر توضیح بدهید ساعت آن نگذشته باشد یعنی چه منظورت اینه که ساعت 3 در لیست بیاید یا ساعت 5
رکودهای سلکت بکند تاریخ و زمان آنها از زمان فعلی بیشتر باشد و رکودهای تاریخ و زمان کمتر از زمان فعلی هستند در سلکت نمایش داده نشوند


با تابع GetDate() تاریخ و زمان همون لحظه رو میتونی بگیری و یک مقایسه انجام بدی. البته به شرطی که تاریخ رو به میلادی ذخیره کرده باشی.
نوع فیلد تاریخ رو چی قرار دادین؟
ازنوع Datetime و تاریخ به صورت میلادی ذخیره شده است به چه صورتی از GetDate() می توان استفاده کرد

Mahyar.FF
سه شنبه 09 خرداد 1391, 17:09 عصر
چگونه می توان دستوری نوشت که سلکت را براساس تاریخ و زمان انجام شود در دیتابیس یک فیلد است که درآن تاریخ و ساعت ذخیره شده است رکودهای را سلکت کند تاریخ و ساعت آنها از زمان فعلی نگذشته باشد
در نظر بگیرید زمان فعلی ساعت 4 عصر 10 خردادماه است رکودهای را سلکت کند که از ساعت آنها از ساعت 4 بیشتر و تاریخ 10 خردادماه بیشتر باشد و رکوردهای که قبل از ساعت 4 باشد سلکت نکند

دوست عزیز، مثالی که شما زدید درست نیست، چطوری ممکنه شما از رکوردهایی که هنوز در Table ایجاد نشده اند Select بزنید..! (رکوردهایی که تاریخ آنها بعد از تاریخ و ساعت فعلی باشد بطور حتم هنوز ایجاد نشده اند)

اما اگر می خواهید رکوردهایی را انتخاب کنید که بعد از تاریخ و ساعت خاصی باشند می توانید مانند مثال زیر عمل کنید:


SELECT *
FROM [dbo].[Orders]
WHERE [OrderDateTime] > '2012-05-27 12:00'

در اینجا OrderDateTime از نوع datetime هست

bitcob589
سه شنبه 09 خرداد 1391, 17:34 عصر
دوست عزیز، مثالی که شما زدید درست نیست، چطوری ممکنه شما از رکوردهایی که هنوز در Table ایجاد نشده اند Select بزنید..! (رکوردهایی که تاریخ آنها بعد از تاریخ و ساعت فعلی باشد بطور حتم هنوز ایجاد نشده اند)

اما اگر می خواهید رکوردهایی را انتخاب کنید که بعد از تاریخ و ساعت خاصی باشند می توانید مانند مثال زیر عمل کنید:


SELECT *
FROM [dbo].[Orders]
WHERE [OrderDateTime] > '2012-05-27 12:00'

در اینجا OrderDateTime از نوع datetime هست
مقایسه زمان فعلی با رکودهای که تاریخ و زمان کمتر از زمان فعلی کمتر نباشند سلکت شود و در سلکت تاریخهای و زمانهای سلکت کند که تاریخ و زمان آنها نگذشته باشد در واقع در دستور زمان فعلی با تاریخ رکودها مقایسه کند اگر تاریخ و زمان رکودها بزرگتر از زمان فعلی بود سلکت شود


دوست عزیز، مثالی که شما زدید درست نیست، چطوری ممکنه شما از رکوردهایی که هنوز در Table ایجاد نشده اند Select بزنید)

اگر تاریخ و ساعت فعلی در رکودها نباشد سلکتی انجام نمی شود

Mahyar.FF
سه شنبه 09 خرداد 1391, 19:06 عصر
اون ستونی که تاریخ و زمان رو در اون ذخیره می کنید، حاوی چه تاریخ و زمانی است؟
در صورت امکان 2 ردیف آخر table تون رو اینجا بنویسید

bitcob589
سه شنبه 09 خرداد 1391, 19:28 عصر
اون ستونی که تاریخ و زمان رو در اون ذخیره می کنید، حاوی چه تاریخ و زمانی است؟
در صورت امکان 2 ردیف آخر table تون رو اینجا بنویسید

تاریخ و زمانی که در جدول ذخیره می شود میلادی است

Mahyar.FF
سه شنبه 09 خرداد 1391, 19:53 عصر
تاریخ و زمانی که در جدول ذخیره می شود میلادی است

منطورم میلادی یا شمسی بودنش نیست، منظورم اینه که از این ستون قراره چه استفاده ای بکنید (در کل)..

bitcob589
سه شنبه 09 خرداد 1391, 20:05 عصر
منطورم میلادی یا شمسی بودنش نیست، منظورم اینه که از این ستون قراره چه استفاده ای بکنید (در کل)..

برای نمایش رکوردهای که تاریخ و زمان آنها از زمان فعلی نگذشته باشد

Mahyar.FF
سه شنبه 09 خرداد 1391, 20:29 عصر
:لبخندساده:
ببین دوست عزیز، فکر نکنم اینطوری بشه کمکی کرد
لطفا ساختار Table مورد نظر رو اینجا بزارید، شاید بشه به جایی رسید.
برای اینکار می تونید بروی Table مورد نظر کلیک راست کنید > گزینه Script Table As رو انتخاب کنید > CREATE To رو انتخاب کنید > و بروی New Query Window Editor کلیک کنید
سپس محتوای آن را در داخل کد بلاک SQL در اینجا بزارید.

موفق باشید

bitcob589
سه شنبه 09 خرداد 1391, 21:13 عصر
USE [barnamehnevise]
GO
/****** Object: Table [dbo].[tbl] Script Date: 06/03/2012 09:18:36 ******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATETABLE [dbo].[tbl](
[id] [int] NOTNULL,
[name] [nvarchar](50)NULL,
[color] [nvarchar](50)NULL,
[dateim] [datetime] NULL,
CONSTRAINT [PK_tbl] PRIMARYKEYCLUSTERED
(
[id] ASC
)WITH (PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_D UP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON) ON [PRIMARY]
)ON [PRIMARY]
GO


scrip به صورت بالا است

Mahyar.FF
سه شنبه 09 خرداد 1391, 21:26 عصر
خوب شما در داخل ستون [dateim] چه تاریخ و زمانی را ذخیره می کنید؟
یطور مثال : ممکنه تاریخ و زمان ایجاد همان ردیف را ذخیره کنید (که هم در بخش کد برنامه ممکن است و هم توسط خود SQL) یا ممکنه تاریخ و زمان مربوط به فرآیند دیگه ای رو ذخیره کنید

البته اگر بتونید فرآیند ایجاد رکوردها رو در این Table بیشتر شرح بدین، بهتره.

موفق باشید

bitcob589
سه شنبه 09 خرداد 1391, 21:47 عصر
خوب شما در داخل ستون [dateim] چه تاریخ و زمانی را ذخیره می کنید؟
یطور مثال : ممکنه تاریخ و زمان ایجاد همان ردیف را ذخیره کنید (که هم در بخش کد برنامه ممکن است و هم توسط خود SQL) یا ممکنه تاریخ و زمان مربوط به فرآیند دیگه ای رو ذخیره کنید

البته اگر بتونید فرآیند ایجاد رکوردها رو در این Table بیشتر شرح بدین، بهتره.

موفق باشید
تاریخ و زمان به صورت میلادی در دیتابیس ذخیره می شود

baktash.n81@gmail.com
چهارشنبه 10 خرداد 1391, 08:19 صبح
سلام

تاریخ و زمان رو می تونی با علامت بزرگتر و کوچکتر مقایسه کنی ... چنتا تابع دیگه هم هست که می تونی ازشون استفاده کنی مثلا DateDiff که اختلاف دو تا تاریخ و بر می گردونه و چک کنی ببینی اگه اختلاف بزرگتر از صفر هست یا نه ...


Declare @CurrentTime datetime
Set @CurrentTime= GetDate()
Select * from Users Where CreationDate < @CurrentTime


-- DateDiff
Select * from Users Where DateDiff(Day,@CurrentTime,CreationDate)<0


اما من خودم استفاده از DateDiff رو پیشنهاد می کنم برای اینکه پارامتر اول این تابع مشخص می کنه که بر چه اساسی می خوای مقایسه کنی ... مثلا اگه Hour بنویسی به جای Day یعنی ساعت ثبت هم مهمه و نتیجه این تابع اختتلاف ساعت این دو تا تاریخ رو بر می گردونه ... اما بزرگتر و کوچکتر حتی رو میلی ثانیه هم حساب می کنند یعنی اگه یکیشون چند میلی ثانیه بزرگتر باشه بزرگتر شناخته می شه در حالی که ممکنه زیاد برات مهم نباشه ...