zoukankan      html  css  js  c++  java
  • asp下实现多条件模糊查询SQL语句

    常写一个简单的模糊查询的SQL语句格式可以如下例: 
    
    sql="select * from 表名 where 字段名 like ’%" & request.form("请求变量") & "%’ " 
    
    说明:1、Where 关键词的后面跟着用来过滤数据的条件,百分号%是通配符,可以代表多个任何字符,若是下划线_就代表一个任意字符。 
    实例如下: 
    sql="select * from 表名 where 姓名 like ’%"&request.form("name")&"%’ and 性别 like ’%"&request.form("sex")&"%’ and 电话 like 
    ’%"&request.form("call")&"%’ " 
    
    上面这条SQL语句使用了三个模糊查询条件:姓名、性别、电话,当然我们还可以用类似 
    姓名 like ’%"&request.form("name")&"%’ 
    的方式构造更多的条件。这样我们就实现了多条件的模糊查询,实际试一试,问题出来了!!!如果数据库的查询字段都有值的化没问题,但如果是下边这样: 
    姓名 性别 电话 
    www.DeepTeach.com 87654321 
    
    当你模糊查询:"电话:5432"时将无法输出该记录,这是因为"性别"无值所以经两个and运算后结果为false/0,没有输出。 显然数据库中这三个字段的必须含有字段值,否则会漏掉正确的输出结果, 
    数据库中正确的输入应是这样的: 
    姓名 性别 电话 
    www.DeepTeach.com null 87654321 
    
    <null>值的逻辑值为1,所以经两次and运算后结果为true/1,可以输出上述记录。
    
    那么在实际中如何来实现这样的多条件模糊查询呢?我是这样来实现的: 
    
    name=Request.QueryString("name") ’姓名 
    sex=Request.QueryString("sex") ’性别 
    call=Request.QueryString("call") ’电话 
    
    Sql= "Select * from 表名 where 1=1" ’1=1 避免所有查询字段为空时出错 
    
    if name <>"" then 
    Sql= Sql & "and 姓名 like ’%"& name &"%’" 
    end if 
    if sex <>"" then 
    Sql= Sql & "and 性别 = ’"& sex &"’" ’这个不是模糊查询了 
    end if 
    if call <>"" then 
    Sql= Sql & "and 电话 like ’%"& call &"%’" 
    end if 
    ...... 
    
    在此,你要注意到姓名、性别、电话这三个字段在数据库中的类型应为“文本”类型,否则查询时会出现“数据类型不匹配”错误。 
    如果三个条件均无输入,点击“查询”时将显示数据库中的所有记录,可能这是你不希望的,可以应该加入一个判断:当三个条件均无输入时,显示“请输入查询条件”,并中断输出到客户浏览器(response.end)例句如下: 
    
    if request.form("name")="" and request.form("sex")="" and request.form("call")="" then 
    response.write("请输入查询条件(可模糊查询)") 
    response.end 
    end if 
    
    切记:sql="select * from 表名 where 姓名 ... 电话 like ... " 
    必须在一行内输入完,而不能用回车符分段,因为vbs多行被认为是多个语句,这是许多初写者常犯的错误。如果你想分多段写,可以用上面的方法在现有变量基础上逐步增加查询语句的各个组成部分并把它存在同一变量内实现。在封闭引号之前或者在打开引号之后你需要增加空格,这样才能保证字符串连接起来的时候你没有把几个词凑到了一块。
    

      

  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/uuxanet/p/3284753.html
Copyright © 2011-2022 走看看