【发布时间】:2011-06-03 01:36:12
【问题描述】:
抱歉,我是使用数据库的新手 - 我正在尝试执行查询 这将获取与 SQL 中的字符串相似的所有字符。
例如,
如果我要查找以某个字符串开头的所有用户,例如 S* 或 Sm* 会返回“Smith、Smelly、Smiles 等...”
我在这方面走在正确的轨道上吗?
任何帮助将不胜感激,并提前致谢!
【问题讨论】:
-
注意不同版本的SQL给你不同的选择;但他们都支持
%。
抱歉,我是使用数据库的新手 - 我正在尝试执行查询 这将获取与 SQL 中的字符串相似的所有字符。
例如,
如果我要查找以某个字符串开头的所有用户,例如 S* 或 Sm* 会返回“Smith、Smelly、Smiles 等...”
我在这方面走在正确的轨道上吗?
任何帮助将不胜感激,并提前致谢!
【问题讨论】:
%。
【讨论】:
Sql 不能这样做...把百分比符号放在中间。
SELECT * FROM users WHERE last_name LIKE 'S%th'
你需要写一个 where 子句和一个 and 子句。
SELECT * FROM users WHERE last_name LIKE 'S%' and last_name LIKE '%th'
【讨论】:
标准 (ANSI) SQL 有两个用于 LIKE 关键字的通配符:
此外,SQL Server 扩展了 LIKE 通配符匹配以包含字符集规范,就像一个普通的正则表达式字符集说明符:
字符集也可以按正常方式指定为范围:
字母匹配的语义当然依赖于使用的排序规则。它可能区分大小写,也可能不区分大小写。
此外,要匹配文字左方括号 ('[]'),您必须使用字符范围说明符。你不会得到语法错误,但你也不会得到匹配。
where x.field like 'x[[][0-9]]'
将匹配看起来像 'x[0]' 、 'x[8]' 等的文本。但是
where 'abc[x' like 'abc[x'
永远是假的。
【讨论】:
您可能还喜欢SOUNDEX 的结果,具体取决于您对姓氏相似度的偏好。
select *
from [users]
where soundex('lastname') = soundex( 'Smith' )
or upper(lastname) like 'SM%'
【讨论】:
您的问题并不完全清楚。
如果您想要所有姓氏为 Smith 的用户,则可以进行常规搜索:
SELECT * FROM users WHERE last_name = 'Smith'
如果您希望所有用户都以“S”开头并以“th”结尾,您可以使用 LIKE 和通配符:
SELECT * FROM users WHERE last_name LIKE 'S%th'
(注意标准 SQL 许多通配符是 '%' 而不是 '*')。
如果您真的想要“听起来像”匹配,许多数据库都支持一个或多个 SOUNDEX 算法搜索。检查您的特定产品的文档(您在问题中未提及)。
【讨论】:
获取姓氏为 smith 的所有用户
SELECT *
FROM [Users]
WHERE LastName ='Smith'
要让所有姓氏包含 smith 的用户执行此操作,也会返回 blasmith、smith2 等
SELECT *
FROM [Users]
WHERE LastName LIKE '%Smith%'
如果您想要以 smith 开头的所有内容,请执行此操作
SELECT *
FROM [Users]
WHERE LastName LIKE 'Smith%'
【讨论】: