PHP/sqlselect使用LIKE子句

PHP/sqlselect使用LIKE子句,php,mysql,sql,Php,Mysql,Sql,我有多个字符串,如下所示: Non-Geographic Number 0843123456 Non-Geographic Number 0843654321 及 在我的billing\u voip\u match表中,我有一个包含以下行的描述列 Non-Geographic Number 0845 Non-Geographic Number 0843 我试图让上面的4个值与上面的2个值匹配,但因为数字中没有空格,所以根本不匹配 我尝试运行的SQL查询是 SELECT * from voip

我有多个字符串,如下所示:

Non-Geographic Number 0843123456
Non-Geographic Number 0843654321

在我的
billing\u voip\u match
表中,我有一个包含以下行的描述列

Non-Geographic Number 0845
Non-Geographic Number 0843
我试图让上面的4个值与上面的2个值匹配,但因为数字中没有空格,所以根本不匹配

我尝试运行的SQL查询是

SELECT * from voip_billing_match where description LIKE '%Non-Geographic Number 0843123456%'
哪个应返回非地理编号0843

选择*from vip\u billing\u match,其中的描述如“%Non-Geographic Number 0845123456%”


应返回非地理编号0845,您的查询应如下所示:

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

-符号类似于星号。

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

%表示“任意字符”(在前面/中间/后面),但您要查找的是“非地理数字0845654321”加上前面或后面的其他字符(或只是字符串),这样您就不会得到任何结果

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

如果您想要纯SQL:

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

如果我理解正确,您需要前缀“非地理编号”和字符串的前四位数字:

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

你应该做相反的事情:

SELECT * from voip_billing_match 
where 'Non-Geographic Number 0843123456' LIKE CONCAT(description, '%');
这将返回描述为非地理编号0843的行。 对其他三个字符串执行相同的操作

说明:

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


试试这个查询,它似乎可以工作

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

它似乎被切换了?试图使用%Non-Geographic Number 0843123456%获取非地理号码0843吗?请检查我的问题。我的字符串有完整的数字,我需要将它们与…0843和…0845匹配
SELECT * from voip_billing_match 
where 'Non-Geographic Number 0843123456' LIKE CONCAT(description, '%');
SELECT  description
FROM    billing_voip_match
WHERE   ('Non-Geographic Number 0845654321' LIKE CONCAT('%', description, '%'));