目前碰到一个问题   select * from wuliu_data where ruku_day between '2008-12-14' and '2008-12-13'
  
  这样查数据为什么不能查到?  select * from wuliu_data where ruku_day between '2008-12-13' and '2008-12-14'  这样就能查到! 那是 为什么?   在如果我要查 当天的信息  select * from wuliu_data where ruku_day between '2008-12-13' and '2008-12-13'  select * from wuliu_data where ruku_day = '2008-12-13'  这两种方式都查不到信息!请问这是为什么?  请问我要查当天的信息该如何写sql语句 , 另外 我要查询时间段是 前者日期一定要比后者小,请问有什么方法可以提前判断,已确保传入sql的参数是合格的!  谢谢啦!! 

解决方案 »

  1.   

    你的问题里哪里体现出DateTimePicker 的问题了?
    假设你的时间的地方都是DateTimePicker.Value
    那么改成DateTimePicker.Value.Date就行了
    between把小的时间放前面吧
      

  2.   

      对 对! 那如果用户把大的时间放在前面了 ! 我是不是程序里面还要加一个判断 来确保sql语句可以执行!  问题就是有什么方法可以比叫DateTimePicker.Value.Date1 和 DateTimePicker.Value.Date2 哪个大?  另外查询当天的信息 应该用 时间 = '传入的时间' 为什么查不出来 ? 另外 传入时间值的类型是 string 数据库时间字段是 Datetime类型 
      

  3.   

    建议搂主这样查询:string szSQL = string.Format("select * from wuliu_data where ruku_day>='{0}' and ruku_day<='{1}' ", this.dateTimePicker1.Value.ToString("yyyy-MM-dd 00:00:00"),this.dateTimePicker1.Value.ToString("yyyy-MM-dd 23:59:59"));使用这个SQL就能查询DateTimePicker控件中选定的天对应的所有纪录。
      

  4.   

    如果用户把较新的日期写在前面了,可以这样做:DateTime beginDate = this.dateTimePicker1.Value.ToString("yyyy-MM-dd 00:00:00");
    DateTime endDate = this.dateTimePicker2.Value.ToString("yyyy-MM-dd 23:59:59");if(beginDate.CompareTo(endDate)>0)
    {
        DateTime tempDate = beginDate;
        beginDate = endDate;
        endDate = tempDate;
    }
    string szSQL = string.Format("select * from wuliu_data where ruku_day>='{0}' and ruku_day <='{1}' ", beginDate.ToString(), endDate.ToString()); 这样转换下就可以了
      

  5.   

      select * from wuliu_data where ruku_day between '2008-12-14' and '2008-12-13' 
      这样查数据为什么不能查到? 
      select * from wuliu_data where ruku_day between '2008-12-13' and '2008-12-14' 
      这样就能查到! 那是 为什么?
     between 的用法: 某一个值 between  A AND B 就是说  某一个值〉=A 某一个值<=B
    ---------------
      在如果我要查 当天的信息 
      select * from wuliu_data where ruku_day between '2008-12-13' and '2008-12-13' 
      select * from wuliu_data where ruku_day = '2008-12-13' 
      这两种方式都查不到信息!请问这是为什么? 
    这个你用一下convert,也许数据类型比较的不对,
      select * from wuliu_data where convert(dateTime,ruku_day,101) between convert(dateTime,'2008-12-13',101) and convert(dateTime,'2008-12-13',101) 
      select * from wuliu_data where convert(dateTime,ruku_day,101) = convert(dateTime,'2008-12-13',101) 

    --------------------------------
    请问我要查当天的信息该如何写sql语句 :  
     select * from wuliu_data where convert(dateTime,ruku_day,101) = convert(dateTime,你的值,101) 
     --------------
     另外 我要查询时间段是 前者日期一定要比后者小,请问有什么方法可以提前判断,已确保传入sql的参数是合格的!
     if (this.dateTimePicker2.Value > this.dateTimePicker1.Value)
     {
       /////
     }
     -------------
    还要注意一下你的DateTimePicker的value值 经过DateTimePicker的format 后是否和你数据库里面的字段类型匹配,
      

  6.   

      对 加上 23:59:59 这个就查得到 ! 请问这是什么原理??  谢谢!! 难道 用了Datetime 类型后 查询一定要加上 yyyy-MM-dd hh:mm:ss 吗? 谢谢!!
      

  7.   

      "请问我要查当天的信息该如何写sql语句 "
    select * from wuliu_data where ruku_day=convert(varchar(10),getdate(),120) 
      

  8.   

    select  convert(varchar(10),getdate(),120)
    结果:2008-12-13
      

  9.   


    这样不就行了,何必那么麻烦,让系统自己去处理日期RUKU_DAY如果设置成datatime类型(这么写可以,下面那种写法也可以)
    using (SqlConnection Connection = new SqlConnection("连接字符串"))
                {
                    SqlDataAdapter DataAdapter = new SqlDataAdapter("SELECT * FROM WULIU_DATA WHERE RUKU_DAY>=@RUKU_DAY1 AND RUKU_DAY<=@RUKU_DAY2", Connection);
                    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day1", Convert.ToDateTime("2008-12-13"));
                    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day2", Convert.ToDateTime("2008-12-14"));
                    DataTable DT = new DataTable();
                    DataAdapter.Fill(DT);
                    // ...
                }RUKU_DAY如果设置成varchar类型(只能这么写)
    using (SqlConnection Connection = new SqlConnection("连接字符串"))
                {
                    SqlDataAdapter DataAdapter = new SqlDataAdapter("SELECT * FROM WULIU_DATA WHERE RUKU_DAY>=@RUKU_DAY1 AND RUKU_DAY<=@RUKU_DAY2", Connection);
                    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day1", Convert.ToDateTime("2008-12-13").ToString("YYYY-MM-DD"));
                    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day2", Convert.ToDateTime("2008-12-14").ToString("YYYY-MM-DD"));
                    DataTable DT = new DataTable();
                    DataAdapter.Fill(DT);
                    // ...
                }
      

  10.   

    如果你的数据保存的还带时间:
    这样不就行了,何必那么麻烦,让系统自己去处理日期RUKU_DAY如果设置成datatime类型(这么写可以,下面那种写法也可以)
    using (SqlConnection Connection = new SqlConnection("连接字符串"))
                {
                    SqlDataAdapter DataAdapter = new SqlDataAdapter("SELECT * FROM WULIU_DATA WHERE RUKU_DAY>=@RUKU_DAY1 AND RUKU_DAY<=@RUKU_DAY2", Connection);
                    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day1", Convert.ToDateTime("2008-12-13 00:00:00"));
                    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day2", Convert.ToDateTime("2008-12-14 23:59:59"));
                    DataTable DT = new DataTable();
                    DataAdapter.Fill(DT);
                    // ...
                }RUKU_DAY如果设置成varchar类型(只能这么写)
    using (SqlConnection Connection = new SqlConnection("连接字符串"))
                {
                    SqlDataAdapter DataAdapter = new SqlDataAdapter("SELECT * FROM WULIU_DATA WHERE RUKU_DAY>=@RUKU_DAY1 AND RUKU_DAY<=@RUKU_DAY2", Connection);
                    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day1", Convert.ToDateTime("2008-12-13 00:00:00").ToString("YYYY-MM-DD HH:mm:ss"));
                    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day2", Convert.ToDateTime("2008-12-14 23:59:59").ToString("YYYY-MM-DD HH:mm:ss"));
                    DataTable DT = new DataTable();
                    DataAdapter.Fill(DT);
                    // ...
                }
      

  11.   

    纠正下,如果RUKU_DAY设置成varchar类型而且你的数据没有带时间的,ToString()也可以不要,只要保证存进去的日期格式和查的时候的日期格式设置是一样的
      

  12.   

    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day1", Convert.ToDateTime("2008-12-13 00:00:00").ToString("YYYY-MM-DD HH:mm:ss"));
                    
    只是举个例子
    实际
    DataAdapter.SelectCommand.Parameters.AddWithValue("ruku_day1", Convert.ToDateTime(Var)ToString("YYYY-MM-DD HH:mm:ss"));
      

  13.   

      在请问 用 verchar  和 datetime 类型传入参数  对查询出来的结果有影响吗? 目前没有发现!  还是效果都是一样的? 
      

  14.   

    一、如果数据库字段设置为datetime没有任何影响二、如果数据库字段设置为varchar
    1.程序查询里参数是字符串传入的
    如果数据库存的是2008-1-1,而你程序查询里参数是字符串'2008-01-01'自然是查不到了的
    如果数据库存的是2008-01-01,而你程序查询里参数是字符串'2008-1-1'自然是查不到了的2.程序查询里参数是DateTime传入的
    跟当前的长时间格式设置有关,比如一般是2008-1-1这种格式没试过这种情况的结果:
    就是如果数据库存的是2008-01-01,而你程序查询里参数是(DateTime的)2008-1-1是不是查得到?所以最好数据库字段设置为datetime类型,这样程序怎么传都可以
    如果设置成varchar的话,存数据的时候参数一定要格式化后存入,比如字符串的话要保证为YYYY-MM-DD的,datetime的话要ToString("YYYY-MM-DD")
      

  15.   

    浙江不是city.... '%上海%'比较合理。。
      

  16.   

    city like '%'+@city+'%'
      

  17.   

    city like '%'+@city+'%'这样当你的@city为空的的时候就满足所有条件 查询依然成立