关于 SQL 语句中的模糊查询问题

时间:2022-09-08 14:55:59
小弟最近使用 Vb.Net + Access2003 进行编程,操作系统平台为 WinXP + SP1,在 SQL 语句中使用 Like 关键字进行模糊查询。语句如下:
"Select * From Line_Table Where Phone_Number Like '%999%'"
全角半角的问题我都注意了,查询符合条件的记录数据量时,返回的是数据库 Line_Table 表中的所有数据量。后来用 * 代替了 SQL 语句中的 % 之后,发现就可以查询所有符合条件的数据了。我很疑惑。SQL 语句进行 Like 查询的时候,不是需要使用 % 作搭配吗?为什么又改成 * 了?

10 个解决方案

#1


sql 中就有是%和_

#2


楼上的高人能解释一下吗?

#3


我们现在写的SQL语句全是用LIKE 和%搭配,没有出现任何问题!

#4


SQL查询语句有多个版本的,不同版本通配符可能不一样

#5


同意 lzmtw(水如烟) 

比如ms sql server\access2000 就支持%

Access2003到是没有用过

#6


Phone_Number 是数值?

在access中,查询数值时要用*
而不是%,具体原因俺也不清楚

#7


Access2003  是用%  我今天还用的

#8


Access 2003脱机帮助
Like 运算符
将字符串表达式与 SQL 表达式中的模式进行比较。

语法
expression Like “pattern”

Like 运算符语法包含以下部分:

部分 说明 
expression 在 WHERE 子句中使用的 SQL 表达式。 
pattern 与 expression 进行比较的字符串文字。 


说明
可以通过 Like 运算符来查找与所指定的模式相匹配的字段值。对于 pattern,可以指定完整的值(例如 Like "Smith"),也可以使用通配符来查找某个范围内的值(例如 Like "Sm*")。

在表达式中,可以使用 Like 运算符来比较字段值与字符串。例如,如果在 SQL 查询中输入 Like "C*",那么该查询将返回所有以字母 C 开头的字段值。在参数查询中,可以提示用户键入要搜索的模式。

下面的示例返回以字母 P 开头并且后面为 A 到 F 之间任何字母以及三个数字的数据:

Like “P[A-F]###”

下表展示了如何通过 Like 来测试不同模式的表达式。


匹配类型 
模式 匹配
(返回 True) 不匹配
(返回 False) 
多个字符 a*a aa, aBa, aBBBa aBC 
 *ab* abc, AABB, Xab aZb, bac 
特殊字符 a[*]a a*a aaa 
多个字符 ab* abcdefg, abc cab, aab 
单个字符 a?a aaa, a3a, aBa aBBBa 
单个数字 a#a a0a, a1a, a2a aaa, a10a 
字符范围 [a-z] f, p, j 2, & 
范围之外 [!a-z] 9, &, % b, a 
非数字值 [!0-9] A, a, &, ~ 0, 1, 9 
复合值 a[!b-m]# An9, az0, a99 abc, aj0 


请参阅
SQL 表达式  在字符串比较中使用通配符  
WHERE 子句  

#9


同时我查询了sql server的联机文档。

将通配符作为文字使用
可以将通配符模式匹配字符串用作文字字符串,方法是将通配符放在括号中。下表显示了使用 LIKE 关键字和 [ ] 通配符的示例。

符号 含义 
LIKE '5[%]' 5% 
LIKE '[_]n' _n 
LIKE '[a-cdf]' a、b、c、d 或 f 
LIKE '[-acdf]' -、a、c、d 或 f 
LIKE '[ [ ]' [ 
LIKE ']' ] 
LIKE 'abc[_]d%' abc_d 和 abc_de 
LIKE 'abc[def]' abcd、abce 和 abcf 


所以,在access 2003中,不定长通配符是使用*的。

#10


为什么我的字段中是汉字的就查不到呢,这是什么原因啊,各路高手请指教。

#1


sql 中就有是%和_

#2


楼上的高人能解释一下吗?

#3


我们现在写的SQL语句全是用LIKE 和%搭配,没有出现任何问题!

#4


SQL查询语句有多个版本的,不同版本通配符可能不一样

#5


同意 lzmtw(水如烟) 

比如ms sql server\access2000 就支持%

Access2003到是没有用过

#6


Phone_Number 是数值?

在access中,查询数值时要用*
而不是%,具体原因俺也不清楚

#7


Access2003  是用%  我今天还用的

#8


Access 2003脱机帮助
Like 运算符
将字符串表达式与 SQL 表达式中的模式进行比较。

语法
expression Like “pattern”

Like 运算符语法包含以下部分:

部分 说明 
expression 在 WHERE 子句中使用的 SQL 表达式。 
pattern 与 expression 进行比较的字符串文字。 


说明
可以通过 Like 运算符来查找与所指定的模式相匹配的字段值。对于 pattern,可以指定完整的值(例如 Like "Smith"),也可以使用通配符来查找某个范围内的值(例如 Like "Sm*")。

在表达式中,可以使用 Like 运算符来比较字段值与字符串。例如,如果在 SQL 查询中输入 Like "C*",那么该查询将返回所有以字母 C 开头的字段值。在参数查询中,可以提示用户键入要搜索的模式。

下面的示例返回以字母 P 开头并且后面为 A 到 F 之间任何字母以及三个数字的数据:

Like “P[A-F]###”

下表展示了如何通过 Like 来测试不同模式的表达式。


匹配类型 
模式 匹配
(返回 True) 不匹配
(返回 False) 
多个字符 a*a aa, aBa, aBBBa aBC 
 *ab* abc, AABB, Xab aZb, bac 
特殊字符 a[*]a a*a aaa 
多个字符 ab* abcdefg, abc cab, aab 
单个字符 a?a aaa, a3a, aBa aBBBa 
单个数字 a#a a0a, a1a, a2a aaa, a10a 
字符范围 [a-z] f, p, j 2, & 
范围之外 [!a-z] 9, &, % b, a 
非数字值 [!0-9] A, a, &, ~ 0, 1, 9 
复合值 a[!b-m]# An9, az0, a99 abc, aj0 


请参阅
SQL 表达式  在字符串比较中使用通配符  
WHERE 子句  

#9


同时我查询了sql server的联机文档。

将通配符作为文字使用
可以将通配符模式匹配字符串用作文字字符串,方法是将通配符放在括号中。下表显示了使用 LIKE 关键字和 [ ] 通配符的示例。

符号 含义 
LIKE '5[%]' 5% 
LIKE '[_]n' _n 
LIKE '[a-cdf]' a、b、c、d 或 f 
LIKE '[-acdf]' -、a、c、d 或 f 
LIKE '[ [ ]' [ 
LIKE ']' ] 
LIKE 'abc[_]d%' abc_d 和 abc_de 
LIKE 'abc[def]' abcd、abce 和 abcf 


所以,在access 2003中,不定长通配符是使用*的。

#10


为什么我的字段中是汉字的就查不到呢,这是什么原因啊,各路高手请指教。