我有一个有趣的/令人沮丧的问题,已经有了解决方案-但是它很慢,而且我不认为这是解决问题的最佳方法。
我想加入两个表。我将第一个称为[MobileNumber],第二个称为[MobileInventory]。表[MobileNumber]包含格式为7123456789的数字。表[MobileInventory]包含可能为以下三种格式之一的数字-7123456789、07123456789,+ 447123456789。我需要将两者结合起来,唯一的共同领域是手机号码。
这两个问题是,[MobileInventory]中无法保证格式(外部系统的导出),并且两个表中的数字均来自多个国家/地区,且国家/地区代码的长度不同(+ 1,+ 44,+ 852)在[MobileNumber]中,我无法告诉您数字是来自哪个国家。这使得很难从[MobileInventory]中删除前x个字符或对任何已知的国家(地区)代码(危险!)进行替换。
我的解决方案(有效):
SELECT *
FROM [MobileNumber]
LEFT OUTER JOIN [MobileInventory]
ON CHARINDEX(REVERSE([MobileNumber].[Number]), REVERSE([MobileInventory]),1) = 1
两个数字都颠倒了,很容易看出您是否在[MobileInventory]。[Mobile]中获得了[MobileNumber]。[Number]的位置,如果结果为1,则表示匹配。
9876543217
98765432170
987654321744 +
98765432174400
这有效,我得到了很好的比赛结果-但是,速度太慢了!我在[MobileNumber]中有c.50k的数字,在[MobileInventory]中有c.20k的数字。
接下来要尝试的是(因为我在存储过程中的MERGE中使用上述结果)从[MobileInvetory]中获取GUID并存储在[MobileNumber]中,以便以后进行视图联接,所以我可以使用游标中的游标进行比较,但是我不相信这样做会更快。
我检查了类似的问题,解决的问题似乎是分隔符或不适用于我的问题的一致的国家/地区代码。
以上内容是通过计划任务自动执行的,因此我可以在当天早些时候开始,但这似乎不对劲!
答案 0 :(得分:1)
有几种方法可以执行此操作。仅使用代码,这里有两种选择。
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if scrollView.contentOffset.y <= -50 {
refreshControl.beginRefreshing()
print("Start Refresh Service")
}
}
第一个预计所有数字的长度都为10位数字,但是我不确定某些国家/地区的号码可能较短。使用移动电话的长度。
您还可以在MobileInventory上创建一个持久化的计算列,以对该列建立索引并创建更有效的联接。