尝试在查询中搜索带有或不带有破折号的字段?

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搜索与空白带有分隔符的文本上的查询,而不是冲刺

在 Access 的组合框中显示带有破折号的社会保险号

在 Twitter API 中搜索带有 Dash 的单词

如何忽略 MYSQL SELECT LIKE %...% 上的字符

带有可能缺少某些搜索条件的查询的 Oracle 存储过程

带有 INNER JOIN 和 WHERE 的 SQL 查询