关于一个datatime类型值的查询问题
小弟有个问题头疼了很久,希望各位前辈多多指教啊^_^
数据库的table表里有个叫日期时间的字段,数据类型为datatime类型。值都为年-月-日 时-00-00这种形式,例如 2007-08-20 10:00:00。
我先取得当前的时间,并将它赋值给ntime,程序如下:
DateTime ntime = DateTime.Today.AddHours( DateTime.Now.Hour );
可以得到2007-08-20 10:00:00(假设当前时间为此值);
然后我查找表中是否有这个值,我用以下的语句
select count(*) from table where 日期时间 = ntime and 区站号 = '56038 ';
程序结果不对。
我又改了一下,重新定义了一个string变量time
string time=ntime.ToString();
select count(*) from tabTimeData where Convert(Varchar, 日期时间, 120) = ' "+time+ " 'and 区站号 = '56388 '
程序结果还是不对;(
但是如果我把程序改为(假设当前时间为2007-08-20 10:00:00)
select count(*) from tabTimeData where Convert(Varchar, 日期时间, 120) = '2007-08-20 10:00:00 ' and 区站号 = '56388 '
程序结果就对了
在查询时如何定义和使用这个datatime类型的变量,请各位前辈多多指点啊^_^
------解决方案--------------------加个#试试.
select count(*) from table where 日期时间 = #ntime# and 区站号 = '56038 ';
在或者,用year,month,day分别比较.也就是
select count(*) from table where year(日期时间) = YEAR(ntime) AND month(日期时间) = month(ntime) .... and 区站号 = '56038 ';
------解决方案--------------------查询的时候,先对日期格式化,如果你是用Oracle数据库可以用Oracle数据库函数TO_DATE( ' " + 时间变量+ " ', 'yyyy-MM-dd HH:MM:SS ')
------解决方案--------------------time把/替换成-
或者你可以用SqlParameter的形式
------解决方案--------------------或者在C#中將time的格式轉為一致。
string time=ntime.ToString( "yyyy-MM-dd HH:mm:ss ");
select count(*) from tabTimeData where Convert(Varchar, 日期时间, 120) = ' "+time+ " 'and 区站号 = '56388 '
------解决方案--------------------单纯的把DateTime与数据库里的date类型不能对应上,应该转换为SqlDateTime类型的
------解决方案--------------------select count(*) from tabTimeData where 日期时间= ' "+time+ " 'and 区站号 = 56388
这样就行了,Sql会将日期类型与 ' "+time+ " '自动匹配,不用转换。