日期:2014-05-18  浏览次数:20826 次

关于一个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+ " '自动匹配,不用转换。