我有多个字符串,如:
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
答案 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右侧的图案必须在左侧的表达式中完全找到。因此,左侧的表达式必须包含其他模式。
答案 4 :(得分:0)
尝试此查询,似乎有效。
SELECT description
FROM billing_voip_match
WHERE ('Non-Geographic Number 0845654321' LIKE CONCAT('%', description, '%'));