【问题标题】: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 列并从新字段中删除破折号,但这似乎会浪费空间可能不必要,而且还需要维护第二列在数据库中。

【问题讨论】:

    标签: sql sql-server sql-server-2008 ms-access


    【解决方案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%"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-17
      • 2019-06-30
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多