我正在编写一个导入实用程序,它使用电话号码作为导入中的唯一密钥.

我需要判断我的数据库中是否还没有电话号码.问题是数据库中的电话号码可能有破折号和括号之类的东西,也可能有其他东西.我写了一个函数来删除这些东西,问题是它是slow,我的数据库中有数千条记录,需要同时导入数千条记录,这个过程可能会非常慢.我已经把电话号码列作为索引了.

I tried using the script from this post:
T-SQL trim &nbsp (and other non-alphanumeric characters)

但这并没有加快速度.

有没有更快的方法删除非数字字符?当需要比较10000到100000条记录时,它可以很好地执行.

无论做什么都需要完成fast次.

Update

为了回答我在其中编写导入实用程序的问题,它是一个C#app.我现在正在比较BIGINT和BIGINT,不需要修改DB数据,而且我仍然在使用非常小的数据集(大约2000条记录)来提高性能.

将BIGINT与BIGINT进行比较会让事情变慢吗?

我已经尽可能地优化了应用程序的代码端(删除了正则表达式,删除了不必要的DB调用).虽然我不能再将SQL作为问题的根源,但我仍然觉得它是.

推荐答案

我可能误解了,但您有两组数据要从数据库中当前数据的一组中删除字符串,然后在导入时删除一组新的字符串.

为了更新现有记录,我只需要使用SQL,这只需要发生一次.

然而,SQL并没有针对这种操作进行优化,因为您说您正在编写一个导入实用程序,所以我会在导入实用程序本身的上下文中进行这些更新,而不是在SQL中.这在性能方面会更好.你在用什么写这个实用程序?

另外,我可能完全误解了这个过程,所以我道歉,如果偏离了基础.

编辑:

using System;  
using System.Data;  
using System.Text.RegularExpressions;  
using System.Data.SqlClient;  
using System.Data.SqlTypes;  
using Microsoft.SqlServer.Server;  

public partial class UserDefinedFunctions  
{  
    [Microsoft.SqlServer.Server.SqlFunction]  
    public static SqlString StripNonNumeric(SqlString input)  
    {  
        Regex regEx = new Regex(@"\D");  
        return regEx.Replace(input.Value, "");  
    }  
};  

部署后,要进行更新,只需使用:

UPDATE table SET phoneNumber = dbo.StripNonNumeric(phoneNumber)

Sql相关问答推荐

如何查询一个名称是根据PL/pgSQL函数结果构建的表?

如何以"% m—% d"格式对生日列表进行排序,以查找与今天最近的日期?

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

如何从上一个值减go 值

基于唯一值在Access查询中创建计数器

在SQL中返回缺省值,即使查询不返回任何结果

查找表中特定值的上次更新日期

返回UPSERT中的旧行值

对多个条件的SQL进行排名

表函数的作用域和功能

使用左外部联接更正列中第+1行的值时重复

获取主表条目,其中最新的辅助条目是 6 个月前

试图找到两个身份列表的交集(列表的长度不同),但获取列 id 不明确?

SQL 中的第一个值和倒数第二个值

INSERT INTO 语法

计算 BigQuery 中列的中值差 - 分析函数不能作为聚合函数的参数

如何使用SQL将患者平均分配给他们所在地区的doctor

多行状态下的分组查询判断状态

SQL Select 最大并获取列名

在 postgresql 中,我可以将其组合成一个查询吗?