结合字母数字时如何选择真实值?

时间:2019-03-08 07:11:31

标签: php mysql

mysql:customer_number = int(无法更改)

$query = "SELECT * FROM clients WHERE customer_number= '123F'" 

结果应该为空。

查询的结果是不正确的,因为MySQL会忽略所有构成整数值(例如'F')的字母字符。

3 个答案:

答案 0 :(得分:3)

您可以检查所提供的值是否严格为整数。

$query = "SELECT * FROM clients WHERE customer_number= '123F' 
AND '123F' REGEXP '^-?[0-9]+$'";

AND强制需要两个条件。

因此,即使MySQL从F忽略123F并将其视为123,第二个条件也将返回FALSE并且123F将失败严格整数条件。

这将产生以下结果:

123->通过

123F->失败

答案 1 :(得分:1)

您可以将customer_number强制转换为字符串:

SELECT *
FROM clients
WHERE CAST(customer_number as CHAR(50)) = '123F'

上面的查询当然不是SARGable的。考虑在构造查询之前在客户端处理比较参数。

Demo here

答案 2 :(得分:1)

或首先检查字符串中的整数是否等于字符串(将字符串更改为您的字段名):

SELECT * FROM clients 
WHERE
  '123F'+0 = '123F' 
AND
  customer_number= '123F';