SELECT * FROM user WHERE name LIKE ';% 三 %'; 将会把 name 为 “ 张 三 ” , “ 三脚猫 ” , “ 唐三藏 ” 等等有 “ 三 ” 的全找出来; |
其中 LIKE ';% 三 %' 明 显 多了个分号 “;” , 这还 能搜索得出来 么 ?估 计 是 编辑 器 编译 的 缘 故。
====== 重新 编辑 文如下:
在 进 行数据 库查询时 ,有完整 查询 和模糊 查询 之分。
一般模糊 语 句如下:
SELECT
字段
FROM
表
WHERE
某字段
Like
条件
|
其中 关 于条件, SQL 提供了四 种 匹配模式:
1 , % :表示任意 0 个或多个字符。可匹配任意 类 型和 长 度的字符,有些情况下若是中文, 请 使用两个百分号( %% )表示。
比如 SELECT * FROM [user] WHERE u_name LIKE '% 三 %'
将会把 u_name 为 “ 张 三 ” , “ 张 猫三 ” 、 “ 三脚猫 ” , “ 唐三藏 ” 等等有 “ 三 ” 的 记录 全找出来。
另外,如果需要找出 u_name 中既有 “ 三 ” 又有 “ 猫 ” 的 记录 , 请 使用 and 条件
SELECT * FROM [user] WHERE u_name LIKE '% 三 %' AND u_name LIKE '% 猫 %'
若使用 SELECT * FROM [user] WHERE u_name LIKE '% 三 % 猫 %'
虽 然能搜索出 “ 三脚猫 ” ,但不能搜索出符合条件的 “ 张 猫三 ” 。
2 , _ : 表示任意 单 个字符。匹配 单 个任意字符,它常用来限制表达式的字符 长 度 语 句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_ 三 _'
只找出 “ 唐三藏 ” 这样 u_name 为 三个字且中 间 一个字是 “ 三 ” 的;
再比如 SELECT * FROM [user] WHERE u_name LIKE ' 三 __';
只找出 “ 三脚猫 ” 这样 name 为 三个字且第一个字是 “ 三 ” 的;
3 , [ ] :表示括号内所列字符中的一个( 类 似正 则 表达式)。 指定一个字符、字符串或范 围 ,要求所匹配 对 象 为 它 们 中的任一个。
比如 SELECT * FROM [user] WHERE u_name LIKE '[ 张 李王 ] 三 '
将找出 “ 张 三 ” 、 “ 李三 ” 、 “ 王三 ” (而不是 “ 张 李王三 ” );
如 [ ] 内有一系列字符( 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 '[^ 张 李王 ] 三 '
将找出不姓 “ 张 ” 、 “ 李 ” 、 “ 王 ” 的 “ 赵 三 ” 、 “ 孙 三 ” 等;
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 |
在 查询 前将待 查 字符串先 经该 函数 处 理即可 。