我可以在SQL查询条件中使用trim

时间:2010-10-07 21:16:28

标签: php sql

您好我正在我的数据库中查找反向电话号码。我有一个用户输入电话号码的框(在我的例子中,数字是01772708200 NO SPACES等)我想要做的是查询我的sql数据库并返回匹配的结果。问题是我的数据库包含不同格式的数千个数字(我应该在开始时编写这个数字但我没有)并且可能数字可以表示为01772 708200或01772 708 200等)

我已经包含了一些脚本,我认为它会削减搜索条件,但它不起作用;

    $value="01772708200" ; 
    $condition = "TRIM(phone1) LIKE '%$value%' ";
    $result = mysql_query("SELECT * FROM major WHERE $condition ")  ;

是用户输入的数字,为了清楚起见,此处仅显示为变量 phone1 是我的数据库表中名为major的电话号码。

有人可以建议我做错了吗?

谢谢

7 个答案:

答案 0 :(得分:8)

TRIM()仅删除前导和尾随空格,因此01772 708200仍将保持不变。您需要使用REPLACE()

您也可以使用REGEXP运算符烹饪忽略其他()-的内容。

答案 1 :(得分:5)

你可能想做类似

的事情
$condition = " REPLACE(phone1, ' ', '') LIKE '%$value%'";

答案 2 :(得分:1)

修剪仅删除右侧和左侧的空格。使用:

 REPLACE(REPLACE(col1, ' ', ''),'\t','')

替换所有空格和制表符实例。

(顺便说一句,谷歌搜索SQL注入。:))

答案 3 :(得分:1)

TRIM仅删除前导和尾随空格。要摆脱中间的空格,你需要改用REPLACE。

REPLACE(phone1, ' ', '')

答案 4 :(得分:1)

对于那些正在阅读并正在使用MSSQL的人,我发现这很有用:

http://www.devcha.com/2007/04/ms-sql-trim-function.html

(MSSQL中没有TRIM功能,但使用RTRIM和LTRIM可以解决问题)

答案 5 :(得分:0)

问题的答案是:是的,你可以而且有时你必须这样做。

如果在数据进入数据库并且包含前导或尾随空格之前没有对数据进行任何清理,那么如果您在没有通配符的情况下搜索该术语,则需要:

SELECT  name
FROM    tbl
WHERE   trim(name)='foo'

如果名称为'foo',则无法使用trim()


针对您的特定问题:

它按预期工作,但您要使用replace()regexp_replace(),具体取决于您使用的数据库以及实际数据的样子。

  • 修剪用于“修剪”字边界开头和结尾处的空格
  • 在某些数据库中,您需要使用btrim()修剪正面和背面
  • 在较旧的数据库中,您可能必须使用ltrim()rtrim()的组合分别修剪左侧和右侧

答案 6 :(得分:0)

好吧,TRIM不会帮助你,因为它只删除字符串开头或结尾的空格。您可以将$ condition替换为:

$condition = 'REPLACE(REPLACE(REPLACE(phone1,"/",""),"-","")," ","")';

你可以嵌套更多这些,所以它取代了“/”,“ - ”和“”。