在MySQL SELECT中使用REPLACE()函数

12

提前道歉,我想问一个肯定很简单的问题。

我有一个MySQL(5.5)数据库,其中包括电话号码字段等内容。我正尝试创建一条语句来搜索该字段,去除任何空格。因此,搜索'0208'将返回'020 8','02 08','0 208',' 0208'等。

这是在Delphi XE2中,如果这有所区别。

'SELECT * FROM sales_ledger WHERE REPLACE(telephone, " ", "") LIKE "%' + SearchEdit.Text + '%"'

...给我一个错误...

WHERE 子句中的过滤器无效

...和...

'SELECT REPLACE(telephone, " ", "") FROM sales_ledger WHERE REPLACE(telephone, " ", "") LIKE "%' + SearchEdit.Text + '%"'

...给了我...

无效的字段名。通用SQL错误。未找到列。

...而且我确实需要返回所有字段。

请问能否提供一些帮助以更正语法。如果您需要更多信息,请不要犹豫,随时询问。非常感谢您的时间。

编辑:我遗漏了一个可能关键的信息。该表实际上是我通过ODBC访问的Sage数据库。由于我尝试的所有方法都没有起作用,这可能是根本问题。抱歉之前没有说。

2个回答

10

您的查询似乎工作良好,请查看演示

首先在您的数据库客户端中尝试此查询。

SELECT * FROM sales_ledger 
WHERE REPLACE(telephone, " ", "") LIKE "%0208%"

编辑:

如果您的查询仍然无法正常工作,请按照以下步骤进行操作:

  • 尝试运行简单的选择查询 (SELECT * FROM sales_ledger)
  • 如果第一个查询成功运行,请尝试添加简单的where条件。 逐步地,您可以使查询与原始查询类似,并找到实际错误所在。

还是不行,冠军,但我已经编辑了原帖并提供了更多信息,可能会有所不同。感谢您的回答! - Jon K.
SELECT * FROM sales_ledger WHERE telephone LIKE "%' + SearchEdit.Text + '%" - 可以工作。SELECT * FROM sales_ledger WHERE REPLACE(telephone, " ", "") LIKE "%' + SearchEdit.Text + '%" - 无法工作。 - Jon K.
请提供能够正常工作的代码块以执行查询。您使用的是哪种编程语言? - GajendraSinghParihar
抱歉耽搁了,第一天回到工作岗位...使用 Delphi 编写的代码:Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('SELECT * FROM sales_ledger WHERE REPLACE(telephone, " ", "") LIKE "%' + SearchEdit.Text + '%"'); Query1.Open; - Jon K.

4
尝试一下这个:
SELECT 
REPLACE(telephone,' ', '') as replacedColumn
FROM sales_ledger 


WHERE REPLACE(telephone,' ', '') LIKE '%"+ SearchEdit.Text +"%'"

或者

Select temp1.* 
from
(
SELECT 
REPLACE(telephone,' ', '') as replacedColumn
FROM sales_ledger 
) as temp1

WHERE temp1.replacedColumn LIKE '%"+SearchEdit.Text+"%'"

第一条语句返回另一个“未找到列”错误,而第二条语句会导致“无效的表规范”错误。我已经在原帖中添加了信息,很抱歉第一次没有提及。谢谢你的时间! - Jon K.
现在出现了“表不存在。一般的SQL错误。找不到表。”再次感谢。 - Jon K.
第一个查询还是第二个查询? - Sashi Kant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接