mysql表中的前导数字

时间:2017-09-13 14:13:57

标签: mysql sql

当我跑步时:

select * from jfi.ambitiontempdata limit 2000;

我的结果设置正确但我的电话号码有问题。我的called_partycalling_party字段中的一些数字是4位数的扩展,这很好,有些是正常的10位数字,这也很好,但是,有些数字领先&#39 1'或其他数字。

有没有办法在此表上运行查询来说if calling_party or called_party are 11 digits, remove leading digit

更新:

这是我目前的查询,用于将一个表中的电话号码与另一个表中的电话号码相匹配

SELECT ua.*, u.firstn, u.lastn,  u.Extension
FROM
 (select a.* FROM jfi.ambitiontempdata a
 inner join jfi.ambition_customer_data c on a.called_party = c.phone
 where a.outbound = 1
UNION
select a.* FROM jfi.ambitiontempdata a
inner join jfi.ambition_customer_data c on a.calling_party = c.phone
where a.outbound = 0) ua 
INNER JOIN jackson_id.users u
on ua.Extension = u.Extension;

jfi.ambitiontempdata电话号码在called_pa​​rty和calling_party中有一些数字是标准的10位数,但有些数字有一个前导' 1'但是,我的ambition_customer_data中的所有数字都有10位数。

2 个答案:

答案 0 :(得分:1)

更新答案以解决更新后的问题:
您可以获取最右边10位的子字符串(如果只有4位,则只返回4位数)。我将假设您的电话号码字段是(var)char字段,而不是bigint。如果它们存储在bigint字段中,那么在将它们作为字符串操作之前,您需要将它们转换为char。

您可以使用RIGHT功能执行此操作。

SELECT ua.*, u.firstn, u.lastn,  u.Extension
FROM
 (select a.* FROM jfi.ambitiontempdata a
 inner join jfi.ambition_customer_data c on right(a.called_party, 10) = c.phone
 where a.outbound = 1
UNION
select a.* FROM jfi.ambitiontempdata a
inner join jfi.ambition_customer_data c on right(a.calling_party, 10) = c.phone
where a.outbound = 0) ua 
INNER JOIN jackson_id.users u
on ua.Extension = u.Extension;

警告:通过函数运行调用* _party列将阻止优化器在这些列上使用索引。因此,随着ampitiontempdata表的增长,性能将下降。

理想情况下,您应该在ampition_customer_data表中存储相同的电话号码,或者在ambitiontempdata表中使用单独的10个字符的列。另一种解决方案可能是使用带有电话号码和ID的单独表格,然后只在表格中引用该ID,而不是完整的电话号码。

答案 1 :(得分:0)

SELECT RIGHT(calling_party, LEN(calling_party) - 1) AS calling_party_trimmed
SELECT RIGHT(called_party, LEN(called_party) - 1) AS called_party_trimmed

借用另一个人的解释:为了解释,RIGHT需要2个参数 - 要操作的字符串(或列),以及要返回的字符数(从&#34开始;右边"一边的字符串)。 LEN返回列数据的长度,我们减去一个,以便我们的RIGHT函数离开最左边的字符"在"后面。