尝试在查询中搜索带有或不带有破折号的字段?
Posted
技术标签:
【中文标题】尝试在查询中搜索带有或不带有破折号的字段?【英文标题】:Trying to search a field with or without dashes in a query? 【发布时间】:2013-03-21 04:44:27 【问题描述】:我有一个表 (table.foo),我试图在其中搜索特定字段。我有一个使用 SQL 查询输出结果的 MS Access 表单。我有一个用户希望能够搜索此字段
如果我使用简单的选择查询
SELECT foo FROM table
WHERE foo LIKE '%xyz%'
我会得到任何带有 xyz 的字符串,但是如果用户搜索 x-yz,他们显然不会得到任何记录 where table.foo='xyz'
无论在搜索字符串?
我知道我可以复制 table.foo 列并创建一个 table.foo-search 列并从新字段中删除破折号,但这似乎会浪费空间可能不必要,而且还需要维护第二列在数据库中。
【问题讨论】:
【参考方案1】:给你:
select foo from table
where REPLACE ( REPLACE ( foo, '-', '' ) , ' ', '' ) like '%xyz%'
输出:x-yz
Live Demo
【讨论】:
此查询在 Access 中不起作用。它运行,但它不返回任何行。如果您将 LIKE 子句中的通配符从%
更改为 *
,它将在 Access 中工作。
@GordThompson 可能工作也可能不工作,这取决于 ANSI 模式,除此之外是不是?它似乎适合使用 SQL Server 的 OP,因此可能使用 ANSI 92 模式。从 LIKE 更改为 ALIKE 将使其在两种环境中均有效。【参考方案2】:
以下对我有用。
SELECT Replace([fieldname],"-","") AS Expr1
FROM tablename
WHERE (((Replace([fieldname],"-","")) Like "%xyz%"));
【讨论】:
以上是关于尝试在查询中搜索带有或不带有破折号的字段?的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch搜索与空白带有分隔符的文本上的查询,而不是冲刺