我有多个字符串,如:
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小提琴