Php 仅为搜索查询将varchar转换为int?

Php 仅为搜索查询将varchar转换为int?,php,mysql,Php,Mysql,我一直试图做的是从表中选择一行,同时将varchar单元格视为int单元格 这里有一点解释: 我有一个电话号码表,有些有“-”,有些没有 我想从数据库中选择一个数字,而不在查询中包含“-”。 所以我使用了这个preg_replace函数: $number = preg_replace("/[^0-9]/","",$number); //that leaves only the numbers in the variable 然后我运行以下查询: "SELECT * FROM `contacts

我一直试图做的是从表中选择一行,同时将varchar单元格视为int单元格

这里有一点解释: 我有一个电话号码表,有些有“-”,有些没有

我想从数据库中选择一个数字,而不在查询中包含“-”。 所以我使用了这个preg_replace函数:

$number = preg_replace("/[^0-9]/","",$number); //that leaves only the numbers in the variable
然后我运行以下查询:

"SELECT * FROM `contacts` WHERE `phone` = '{$number}'"
现在,它当然有时不匹配,因为我搜索的数字在数据库中可能有“-”,所以我试图寻找解决方案, 解决方案就是把单元格转换成int,但我不想这么做

所以环顾四周后,我发现了一个名为CAST的MySQL函数,使用方式如下:CAST(电话为UNSIGNED)

我想把它弄糟,但似乎不起作用

编辑:


我一直在寻找解决方案,最终使用MySQL的REPLACE函数实现了这一点

"SELECT * FROM `contacts` WHERE REPLACE(phone,'-','') = '{$number}'"
"SELECT * FROM `contacts` WHERE REPLACE(phone,'-','') = '{$number}'"
谢谢大家的帮助。

1。 最简单的方法可能是使用
REPLACE
操作符

SELECT * FROM `contacts` WHERE REPLACE(REPLACE(`phone`, '-', ''), ' ', '') = '5550100';
它所做的是simpy将所有空格和破折号替换为零,即删除所有空格和破折号

二,。 解决此问题的另一种方法是像一样使用
。如果带破折号的电话号码的格式始终与555-0100和555-0199相同,则可以简单地插入一个-符号,而不是破折号。如果您的号码可能采用不同的格式,您可以在每个字符之间插入一个“-”。这不是一个漂亮的解决方案,但它确实奏效了

SELECT * FROM `contacts` WHERE `phone` LIKE '555%0100'; 

三,。 您可以使用正则表达式。因为MySQL没有实现正则表达式替换函数,所以需要使用用户定义的函数。看一看。它支持REGEXP_LIKE、REGEXP_SUBSTR、REGEXP_INSTR和REGEXP_REPLACE


编辑:删除了我的第一个答案,并添加了一些其他选项。

MySQL不支持提取正则表达式匹配项

您可以尝试编写一个存储函数来处理它,但最好的办法是将数据转换为整数,以便所有数字都统一。我知道你说过你不想那样做,但如果你可以,那么这是最好的办法。否则,您可以执行以下操作:

"SELECT * FROM `contacts` WHERE `phone` = '{$number}' OR `phone` = '{$number_with_dashes}'"

也就是说,搜索普通数字
或带破折号的数字。

我一直在寻找解决方案,并最终使用MySQL的REPLACE函数

"SELECT * FROM `contacts` WHERE REPLACE(phone,'-','') = '{$number}'"
"SELECT * FROM `contacts` WHERE REPLACE(phone,'-','') = '{$number}'"

我今天已经看到了那个页面,试图弄乱它,但似乎不适合,如果适合,你能告诉我如何在我提供的查询中使用它吗?谢谢。@Donny:让我们看看你到底做了什么。你为什么要存储格式化的电话号码?你可能会发现这很有启发性: