View Full Version : مشکل با وارد کردن زمان در فیلدی از نوع datetime
بیتافرهی
چهارشنبه 10 تیر 1388, 11:20 صبح
سلام
یکی از جدولای برنامم ،دارای دو ستون ساعت شروع و ساعت پایان است که از نوع datetime می باشند.
من می خوام روی این جدول یک کوئری بزنم که سطرهایی از جدول را که ساعت شروع یا پایانشون بین مقادیر داده شده (که این مقادیر از طریق متغیر تامین می شود) ،باشد ،نشان داده شوند.
اما که وقتی می خوام خودم داخل جدول ساعت شروع یا پایان را وارد کنم با خطا مواجه میشم.الان مشکلم اینجاست که اصلا نمی تونم مقادیر این دو ستون از جدولم را پر کنم!
متن خطا:
ُstring was not recognized as valid datetimeو اجازه ی وارد کردن زمان را نمی دهد.چرا؟
در ضمن کوئری هم که نوشتم این است:
alter proc sp_synchronize_time
@time_of_start datetime,
@time_of_end datetime
as
select *
from Tbl_courses_presented
where (time_of_start between @time_of_start and @time_of_end )or
(time_of_end between @time_of_start and @time_of_end )
--exec sp_synchronize_time 7,12
Afshin160
چهارشنبه 10 تیر 1388, 17:11 عصر
سلام ..
والا اولا" من براي مقايسه دو تاريخ از datadiff استفاده مي كنم .
select datadiff(year,'2004-3-29',getdate())
2- فكر كنم ارور error شما مبني بر تبديل نوع داده string به datetime است .
تو برنامه cShorp
DateTime dt = DateTime.Parse(str);
موفق باشيد .
meysam_pro
چهارشنبه 10 تیر 1388, 17:45 عصر
برای کار با ساعت و تاریخ از این فرمت استفاده کنید:
yyyymmdd به جای تاریخ و HHMM برای ساعت.
اگه به صورت رشته ذخیره کنید، در زمان کوئری # بزارین تا عددش بکنه.
بیتافرهی
چهارشنبه 10 تیر 1388, 19:36 عصر
والا اولا" من براي مقايسه دو تاريخ از datadiff استفاده مي كنم .
کد:
select datadiff(year,'2004-3-29',getdate())
ممنون از جوابتون ولی
من میخوام زمان را مقایسه کنم نه تاریخو.
برای کار با ساعت و تاریخ از این فرمت استفاده کنید:
yyyymmdd به جای تاریخ و HHMM برای ساعت.
این فرمتو کجا باید اعمال کنم؟منظورتون موقعی که کاربر داره ساعت را وارد می کنه ،است؟
کجا باید این علامت # را وارد کنم؟
من فقط می خوام زمان را ذخیره کنم.با این نوع داده تاریخ هم که وارد میشه!
Afshin160
پنج شنبه 11 تیر 1388, 10:36 صبح
سلام ...
نقل قول:
والا اولا" من براي مقايسه دو تاريخ از datediff استفاده مي كنم .
کد:
select datediff(year,'2004-3-29',getdate())
ممنون از جوابتون ولی
من میخوام زمان را مقایسه کنم نه تاریخو.
datediff براي مقايسه است و حتي ثانيه هم مقايسه مي كنه ....!!!!
زمان و تاريخ باهم و بصورت كامل در فيلد از نوع date ذخيره ميشه ...!!!
DATEDIFF ( datepart , startdate , enddate )
datepart Abbreviations year
yy, yyyy
quarter
qq, q
month
mm, m
dayofyear
dy, y
day
dd, d
week
wk, ww
hour
hh
minute
mi, n
second
ss, s
millisecond
ms
microsecond
mcs
nanosecond
ns
لطفا" يه نگاهي به Syntax بندازيد.!!!!!!
http://msdn.microsoft.com/en-us/library/ms189794.aspx
SELECT DATEDIFF(year, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(quarter, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(month, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(dayofyear, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(day, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(week, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(hour, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(minute, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(second, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
SELECT DATEDIFF(millisecond, '2005-12-31 23:59:59.9999999'
, '2006-01-01 00:00:00.0000000');
CREATE TABLE dbo.Duration
(
startDate datetime2
,endDate datetime2
)
INSERT INTO dbo.Duration(startDate,endDate)
VALUES('2007-05-06 12:10:09','2007-05-07 12:10:09')
SELECT DATEDIFF(day,startDate,endDate) AS 'Duration'
FROM dbo.Duration;
-- Returns: 1
meysam_pro
جمعه 12 تیر 1388, 08:45 صبح
این فرمتو کجا باید اعمال کنم؟منظورتون موقعی که کاربر داره ساعت را وارد می کنه ،است؟
کجا باید این علامت # را وارد کنم؟
من فقط می خوام زمان را ذخیره کنم.با این نوع داده تاریخ هم که وارد میشه!
تاریخ یا ساعت رو از کاربر بگیرین و به شکل گفته شده ، تو یه فیلد عددی بزارین، موقع مقایسه کردن جواب مورد نظر رو تولید میکنه.
اگه متنی ذخیره بکنی باید موقع نوشتن کوئری قبل مقدار # بزارین
AminSobati
جمعه 12 تیر 1388, 11:00 صبح
set dateformat ymd
declare @UserTime1 datetime, @UserTime2 datetime
set @UserTime1='4:00 PM'
set @UserTime2='6:00 PM'
declare @x table(c1 datetime)
insert @x values('2006-1-20 16:53:58')
insert @x values('2007-9-11 17:31:05')
insert @x values('2008-11-3 8:12:44')
insert @x values('2005-9-11 16:11:05')
select *,convert(varchar(30),c1,114) from @x
where convert(varchar(30),c1,114) between @UserTime1 and @UserTime2
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.