有关SQL模糊查询

文章通过搜索获得有关SQL模糊查询原文地址不详但发现转载文章基本都有比如:
SELECT * FROM user WHERE name LIKE ';% 3%';
将会把name为“张 3”“ 3脚猫”“唐 3藏”等等有“ 3”全找出来;
其中LIKE ';% 3%'明显多了个分号“;”这还能搜索得出来么?估计是编辑器编译缘故
重新编辑文如下:
在进行数据库查询时有完整查询和模糊查询的分
般模糊语句如下:
SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中有关条件SQL提供了 4种匹配模式:
1%:表示任意0个或多个可匹配任意类型和长度有些情况下若是中文请使用两个百分号(%%)表示
比如 SELECT * FROM [user] WHERE u_name LIKE '% 3%'
将会把u_name为“张 3”“张猫 3”、“ 3脚猫”“唐 3藏”等等有“ 3”记录全找出来
另外如果需要找出u_name中既有“ 3”又有“猫”记录请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '% 3%' AND u_name LIKE '%猫%'
若使用 SELECT * FROM [user] WHERE u_name LIKE '% 3%猫%'
虽然能搜索出“ 3脚猫”但不能搜索出符合条件“张猫 3”
2_: 表示任意单个匹配单个任意它常用来限制表达式长度语句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_ 3_'
只找出“唐 3藏”这样u_name为 3个字且中间个字是“ 3”
再比如 SELECT * FROM [user] WHERE u_name LIKE ' 3__';
只找出“ 3脚猫”这样name为 3个字且第个字是“ 3”
3[ ]:表示括号内所列个(类似正则表达式)指定串或范围要求所匹配对象为它们中
比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王] 3'
将找出“张 3”、“李 3”、“王 3”(而不是“张李王 3”);
如 [ ] 内有系列(01234、abcde的类)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
将找出“老1”、“老2”、……、“老9”;
4[^ ] :表示不在括号所列的内单个其取值和 相同但它要求所匹配对象为指定以外
比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王] 3'
将找出不姓“张”、“李”、“王”“赵 3”、“孙 3”等;
SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
将排除“老1”到“老4”寻找“老5”、“老6”、……
5查询内容包含通配符时
由于通配符缘故导致我们查询特殊“%”、“_”、“[”语句无法正常实现而把特殊用“[ ]”括起便可正常查询据此我们写出以下:
function sqlencode(str)
str=replace(str,"[","[") '此句定要在最前
str=replace(str,"_","[_]")
str=replace(str,"%","[%]")
sqlencode=str
end function
在查询前将待查串先经该处理即可
Tags: 

延伸阅读

最新评论

发表评论