您的位置:程序门 -> .net技术 -> c#



关于一个datatime类型值的查询问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于一个datatime类型值的查询问题[已结贴,结贴人:ytwin]
发表于:2007-08-20 10:46:03 楼主


小弟有个问题头疼了很久,希望各位前辈多多指教啊^_^

数据库的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类型的变量,请各位前辈多多指点啊^_^
发表于:2007-08-20 10:50:171楼 得分:0
请各位大虾多指点,自己顶下先:)
发表于:2007-08-20 10:58:412楼 得分:0
再顶一下!
发表于:2007-08-20 11:03:283楼 得分:2
加个#试试.
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 ';
发表于:2007-08-20 11:06:164楼 得分:2
查询的时候,先对日期格式化,如果你是用oracle数据库可以用oracle数据库函数to_date( ' "   +   时间变量+   " ', 'yyyy-mm-dd   hh:mm:ss ')
发表于:2007-08-20 11:08:565楼 得分:0
qery前辈,我用的是sql数据库,可否给点建议?
xray2005前辈,我试试,多谢。
发表于:2007-08-20 11:24:336楼 得分:0
qery前辈,
这两个方法好像都不太对哦;(

发表于:2007-08-20 11:32:027楼 得分:0
大家再帮忙看看     在线等     :)
发表于:2007-08-20 11:34:438楼 得分:2
time把/替换成-

或者你可以用sqlparameter的形式
发表于:2007-08-20 11:40:549楼 得分:0
改用datediff

string   time=ntime.tostring();
select   count(*)   from   tabtimedata   where   datediff(hh,   日期时间,   ' "+time+ " '   )   =   0   and   区站号   =   '56388 '
发表于:2007-08-20 11:41:4110楼 得分:0
lovefootbal前辈,你说的是把-替换成/吧,数据库里表的字段的值我可改不了哈^_^
sqlparameter的形式可以说的详细点么?
发表于:2007-08-20 11:46:1011楼 得分:10
或者在c#中將time的格式轉為一致。

string   time=ntime.tostring( "yyyy-mm-dd   hh:mm:ss ");
select   count(*)   from   tabtimedata   where   convert(varchar,   日期时间,   120)   =   ' "+time+ " 'and   区站号   =   '56388 '
发表于:2007-08-20 11:54:3212楼 得分:0
大体程序如下:
                                                int   min   =   ntimes.minute;
string   time=ntime.tostring();
messagebox.show(time);
if(min   > =   30)
{
string   commandtext= "select   count(*)   from   table   where   datediff(hh,   日期时间,   ' "+time+ " '   )   =   0   and   区站号   =   '56038 ' ";
string   connstring= "data   source=192.24.8.42;initial   catalog=ccs;user   id=sa;password=111 ";
sqlconnection   conn=new   sqlconnection();
conn.connectionstring=connstring;
sqlcommand   cmd=new   sqlcommand(commandtext,conn);
conn.open();

string   count=cmd.EXECutescalar().tostring();                
messagebox.show( "啊 ");
                                                                if(count   ==   "0 ")
{

messagebox.show( "站点56038的数据未到 ");
   
}



paoluo,程序还是不对啊,messagebox.show( "啊 ")这句就没有执行
发表于:2007-08-20 14:02:4813楼 得分:0
你的程序沒執行和那句代碼應該沒有關係。

檢查下,有沒有進入

if(min   > =   30)

這裡面

min是否大於等於30   ?
发表于:2007-08-20 14:13:5614楼 得分:0
在程序中转换格式:
datetime   dt=datetime.now;
string   str=   dt.touniversaltime().tostring();//2007-8-20   14:15:25
发表于:2007-08-20 15:35:3115楼 得分:0
同意   qery(义薄云天)   的说法   应该是格式的问题

如果不是精确的时间查询   建议   把时间转字符   用   like   检索   日期部分   ,相对容易
发表于:2007-08-20 17:25:1316楼 得分:2
单纯的把datetime与数据库里的date类型不能对应上,应该转换为sqldatetime类型的
发表于:2007-08-20 17:34:5517楼 得分:2
select   count(*)   from   tabtimedata   where     日期时间=   ' "+time+ " 'and   区站号   =   56388

这样就行了,sql会将日期类型与 ' "+time+ " '自动匹配,不用转换。
发表于:2007-08-20 21:27:1118楼 得分:0
谢谢qery,xiaoniao2636,lisbates27,lwh_gsww,多谢各位前辈指点
问题解决了,是采用paoluo前辈的方法,

在c#中將time的格式轉為一致。

string   time=ntime.tostring( "yyyy-mm-dd   hh:mm:ss ");
select   count(*)   from   tabtimedata   where   convert(varchar,   日期时间,   120)   =   ' "+time+ " 'and   区站号   =   '56388 '

多谢各位^_^


快速检索

最新资讯
热门点击