比如我数据库中,有一个字段(Numbers),里面记录的是一串数字加空格,例如
(2 5 8 11 15 18 19 21 22 24)不包含括号现在我要从数据库中Numbers列的数据中,找出最少包含3个 (2 4 6 8 9)中的数的数据出来,该怎么做呀?例如数据库中某一行的Numbers里的字符串是:2 5 8 11 15 18 19 21 22 24我给出的5个数字是(2 5 7 9 22),那么这个就符合要求,取出来放入数组中!我用的是Access数据库,谢谢大家啦!

解决方案 »

  1.   

    我自己是想到了一个方法,把所有Numbers列中的数据都读到一个数组中,再比较那就行了,但是数据量大了的时候,可能会很慢!!
    如果只有这个方法的话,那请问,怎么把Numbers列中的数据都读到一个数组中?
      

  2.   

    OleDbDataAdapter township = new OleDbDataAdapter("select top " + winamount + " * from client where name like'%"2"%' and name like'%"3"%' order by 编号 desc", FPara.connStr);这样应该可以达到你要的效果,不过可能方法过时了一些。
      

  3.   

    这个好像需要一行一行数据记录做处理,用SQL不知道是否有方法,我先把用程序解决的思路给你整出来!
    程序不过的,自己调试一下,思路这样!            System.Collections.ArrayList alGetDataRow = new System.Collections.ArrayList(s1.Length);
                string sQuery = "2 5 7 9 22";
                string[] sQueryArray = sQuery.Split(new char[] { ' ' });   //分割匹配条件的字串
                DataTable dt = new DataTable();
                foreach (DataRow drTemp in dt.Rows)
                {
    //分割字串处理
                     string[] s1 = drTemp["Numbers"].ToString().Split(new char[] { ' ' });
                    System.Collections.ArrayList al = new System.Collections.ArrayList(s1.Length);
                    s1.CopyTo(al,0);
                    int i = 0;
                    foreach (string sTemp in sQueryArray)
                    {
                        if (al.Contains(sTemp))
                        {
                            i++;
                            if (i == 3)   //满足3个符合的条件
                            {
                                alGetDataRow.Add(drTemp);   //放入数组
                                break;
                            }
                        }
                    }
                }            //alGetDataRow 存放了DATAROW的数组
      

  4.   


    这种在查找2这个数字时候,会把22找出来,
    楼主不应该存放在一个字段中,这种存放查找会比较晕,用ACCESS这就功能更弱了,否则用2005的存放成XML,然后用XML查找方法查询,应该会更准确!
      

  5.   

    OleDbDataAdapter township = new OleDbDataAdapter("select top " + winamount + " * from client where name like'%"2"%' and name like'%"3"%' order by 编号 desc", FPara.connStr); 
      

  6.   

    用sql查询不好操作,但是查询出来做效率很低。关注一下
      

  7.   

    搞地下彩票啊?这个除了循环比较别无他法,写出一个大概的思路:void GetFixedNum()
    {
    String[] wanted = {'2','5','7', '9', '22'};
    OleDBDataReader reader = Conn.ExecuteReader("SELECT NumList FROM YourTable");
    List<String> result = new List<String>();
    while reader.read()
    {
      string [] numArr = reader[0].ToString().split(' ');
      int i = 0; //numArr起始下标
      int j = 0; //wanted起始下标
      int fixed = 0; //找到符合的个数//(假定NumList字段中的数字是排好序的,才能高效率地比较)
      while (i < numArr.Length)
      {
         if (numArr[i] == wanted[j])
         {
            j ++;
            fixed ++;
         }
         i++;
      }
      
      if (fixed >=3)
      {
         result.Add(reader[0].ToString());
      }
    }//returns result Array
      return result.ToArray();
    }