【问题标题】:SQL query to render similar results ignoring special characters忽略特殊字符的 SQL 查询以呈现相似的结果
【发布时间】:2018-01-10 09:18:36
【问题描述】:

谁能建议我一个可以实现以下目标的 SQL 查询: 特殊字符 ., _ 和 ' ' 应该列出相同的结果。

例子:

如果您搜索123_456,系统还应该找到123456 和123.456 和12_3456 和123456.7 和_123.456。

如果您搜索12345,系统应该也会找到123_456。

【问题讨论】:

  • 选择mysql或sql-server ?
  • 考虑功能之类的。 dev.mysql.com/doc/refman/5.7/en/…
  • 使用正则表达式
  • SQL LIKE % NOT SEARCHING的可能重复
  • 将鼠标悬停在您添加到问题中的SQL 标签上。它解释了不同的 SQL 方言做不同的事情。在您选择MySQL 或SQL-Server 之前,不会有正确答案,因为他们做事不同。

标签: mysql sql sql-server database


【解决方案1】:

使用 REPLACE 并包含所有特殊字符。试试这个

SELECT * FROM tablename WHERE 
REPLACE(REPLACE(REPLACE(columname,'_',''),'.',''),',','')  LIKE '%123456%'

【讨论】:

  • 假设 SQL Server,我认为他实际上需要在搜索模式 上完成对 also 的替换(具体给出示例搜索'123_456' 应该会找到'12_3456'...) 之后,这有点模棱两可,但我认为OP 需要= 而不是LIKE...REPLACE(REPLACE(REPLACE(field))) = REPLACE(REPLACE(REPLACE(string)))
【解决方案2】:

我会替换所有字符,将其转换为 INT 并在 FilterCol 上过滤。

WITH CTE AS 
(
  SELECT CAST (REPLACE (REPLACE (ColA, '-', ''), '.', '') AS INT) AS 
  FilterCol, ColA
  FROM TableA
)

SELECT * FROM CTE WHERE FilterCol >= 0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2023-03-22
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    相关资源
    最近更新 更多