在MySQL SELECT中使用REPLACE()

时间:2012-12-28 11:50:41

标签: mysql

我提前道歉,询问我肯定会证明这是一个非常简单的问题。

我有一个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 个答案:

答案 0 :(得分:7)

您的查询似乎正常工作,请参阅 demo

首先尝试此查询给您DB Client

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

修改

如果您查询仍然无效。一步一步的过程。

  • 尝试运行简单的选择查询(SELECT * FROM sales_ledger
  • 如果第一个查询运行尝试添加简单where条件。 所以一步一步你可以使你的查询类似于原始查询,并找到实际错误来自哪里。

答案 1 :(得分:3)

试试这个::

SELECT 
REPLACE(telephone,' ', '') as replacedColumn
FROM sales_ledger 


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

<强> OR

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

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