PHP / SQL使用LIKE子句选择


PHP / SQL Select using LIKE clause

我有多个字符串,如:

Non-Geographic Number 0843123456
Non-Geographic Number 0843654321

Non-Geographic Number 0845123456
Non-Geographic Number 0845654321

在我的billing_voip_match表中,我有一个描述列,其中包含以下行

Non-Geographic Number 0845
Non-Geographic Number 0843

我正试图让上面的4个值与上面的2个值匹配,但因为数字中没有空格,所以根本不匹配它们。

我试图运行的SQL查询是

SELECT * from voip_billing_match where description LIKE '%Non-Geographic Number 0843123456%'

应该返回Non-Geographic Number 0843

SELECT * from vip_billing_match where description LIKE '%Non-Geographic Number 0845123456%'

应该返回Non-Geographic Number 0845

如果我理解正确的话,你需要前缀'非地理号码'和字符串的前四位数字:

SELECT LEFT('description',26)
FROM voip_billing_match
WHERE description LIKE 'Non-Geographic Number%'

你的查询应该是这样的:

SELECT * from voip_billing_match 
where description LIKE CONCAT(SUBSTR('Non-Geographic Number 0843123456', 0, 26), '%')

您应该将字符串修剪为前x个字符(在您的情况下,如果我计数正确,它将是26个字符):

$string = "Non-Geographic Number 0845654321";
$string = substr($string, 0, 26);
query = "SELECT * from voip_billing_match where description LIKE '$string'"

%表示"任何字符"(在之前/中间/之后),但是您要查找的是"非地理编号0845654321"加上之前或之后的其他内容(或只是字符串原样),因此您不会得到任何结果。

在我的例子中,你不需要%,因为你已经在寻找正确的字符串(即:"非地理编号0845")

如果你想要纯SQL:

SELECT * from voip_billing_match where description = SUBSTRING('Non-Geographic Number 0845654321', 0, 26)

你应该反过来做:

SELECT * from voip_billing_match 
where 'Non-Geographic Number 0843123456' LIKE CONCAT(description, '%');

返回描述为Non-Geographic Number 0843的行。对其他三个字符串执行相同的操作。

解释:

LIKE右边的模式必须完全在左边的表达式中找到。因此,左边的表达式必须包含模式,否则

演示

尝试这个查询,它似乎工作。

SELECT  description
FROM    billing_voip_match
WHERE   ('Non-Geographic Number 0845654321' LIKE CONCAT('%', description, '%'));
SQL小提琴