PHP / SQL选择使用LIKE子句

时间:2014-08-07 07:57:22

标签: php mysql sql

我有多个字符串,如:

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 Query是

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

5 个答案:

答案 0 :(得分:0)

您的查询应如下所示:

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

%-Sign就像一个星号。

答案 1 :(得分:0)

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

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

%表示"任何角色" (在中间/之后),但你正在尝试的是找到任何与#34;非地理编号0845654321"在之前或之后加上其他东西(或只是字符串),这样你就不会得到任何结果。

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

如果你想要纯SQL:

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

答案 2 :(得分:0)

如果我理解正确,您需要前缀'非地理位置号码'而且只是字符串中的前四位数字:

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

答案 3 :(得分:0)

你应该做反过来:

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

这将返回带有Non-Geographic Number 0843描述的行。 对其他三个字符串也一样。

<强>解释

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

Demo

答案 4 :(得分:0)

尝试此查询,似乎有效。

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

SQL Fiddle