我数据库中有个DateTime类型的字段PosetTime,a.aspx上有个输入时间的TextBox,日期输入是用的Calendar控件,则TextBox.Text得到的值是DateTime类型值,格式是yyyy-MM-dd(如:2007-03-14),而数据库中的值还含有时间(2007-03-14 12:33:13),该怎样基于输入这个时间与数据库中时间的比较. eg:我要查询
2008-03-15这天的信息,what can I do?  在告戒各位一句,晚上千万别喝咖啡,妈的,我喝了包现在都睡不着

解决方案 »

  1.   

    喝一包就睡不着?楼主可能有精神衰弱。
    select * from table where datecolumn BETWEEN @inputtime AND dateadd(houre,24,@inputtime) 
      

  2.   

    也可以把字段PosetTime类型改为string
      

  3.   

    参考:http://download.csdn.net/source/207275
      

  4.   


    @inputdate=DateTime.parse("2008-03-15")
    select * from table where PostDate BETWEEN @inputdate AND dateadd(houre,24,@inputdate)  
      

  5.   

    string sql = string.Format("select * from Table1 where PostDate between '{0}' and '{0} 23:59:59'", TextBox1.Text.Trim());
      

  6.   

    string sql="select * from Table where Postdate between '"+TextBox1.Text.Trim()+" 00:00' and '"+TextBox1.Text.Trim()+" 23:59' ";
      

  7.   

    select * from table where PostDate BETWEEN @inputdate AND dateadd(houre,24,@inputdate) 
      

  8.   

    用:string sql = string.Format("select * from Table1 where PostDate between '{0}' and '{0} 23:59:59'", TextBox1.Text.Trim());或:string sql = string.Format("select * from Table1 where DATEDIFF(dd,PostDate,'{0}')=0",TextBox1.Text.Trim());或string sql = string.Format("select * from Table1 where PostDate between '{0}' and 'dateadd(ms,-1,dateadd(dd,1,{0}))", TextBox1.Text.Trim());
      

  9.   

    第二种写法最方便,准确性也最高, 但是,如果postDate上建有索引,那么这种写法会造成表扫描,而不是索引扫描, 效率差一点.
    第一三种写法,选取的数据会有误:2003-1-1 23:59:59.333 并不是between 2003-1-1 and 2003-1-1 23:59:59 的.会有一定机率造成数据漏掉, 看你自己的情况,选择一种取法.要效率还是要准确度. 再精确一点,就是第三种写法,将 dateadd(ms,改为 dateadd(mms, 豪微秒,这种可能就几呼没有了.
      

  10.   

    非常感谢各位的回复 
    whycom 你说我精神有问题,嘿嘿,少给你5分