从SQL Server中的VARCHAR中删除非数字字符的最快方法

我正在编写一个导入实用程序,它将电话号码用作导入中的唯一键。


我需要检查数据库中是否不存在电话号码。问题在于数据库中的电话号码可能包含破折号和括号之类的内容,也可能包含其他内容。我写了一个删除这些东西的函数,问题是它很慢,并且数据库中有成千上万的记录,并且一次要导入成千上万的记录,所以此过程可能会令人难以接受。我已经将电话号码列作为索引。


我尝试使用这篇文章中的脚本:

T-SQL trim&nbsp(和其他非字母数字字符)


但这并没有加快速度。


是否有删除非数字字符的更快方法?当必须比较10,000到100,000条记录时,某些性能会很好。


无论做什么都需要快速执行。


更新

鉴于人们的回应,我认为我将必须在运行导入实用程序之前清理字段。


为了回答我在其中编写导入实用程序的问题,它是一个C#应用程序。我现在正在将BIGINT与BIGINT进行比较,而无需更改数据库数据,而我仍然会因为很少的一组数据(大约2000条记录)而对性能造成冲击。


将BIGINT与BIGINT进行比较会降低速度吗?


我已尽我所能优化了应用程序的代码方面(删除了正则表达式,删除了不必要的数据库调用)。尽管我无法再将SQL隔离为问题的根源,但我仍然觉得确实如此。


慕的地8271018
浏览 510回答 3
3回答

MMMHUHU

我可能会误会,但您有两组数据要从一组中删除数据库中当前数据的字符串,然后在每次导入时都从一组中删除字符串。对于更新现有记录,我只会使用SQL,那只需要发生一次。但是,SQL并未针对这种操作进行优化,因为您说的是编写导入实用程序,所以我将在导入实用程序本身而不是在SQL中进行这些更新。这将是更好的性能选择。您在用什么编写实用程序?另外,我可能会完全误解该过程,因此,如果我偏离基准,我深表歉意。编辑:对于初始更新,如果您使用的是SQL Server 2005,则可以尝试CLR函数。这是一个使用正则表达式的快速方法。不确定性能如何进行比较,我自己从未使用过此功能,除非现在进行快速测试。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)

慕莱坞森

我看到了带有T-SQL代码和PATINDEX的解决方案。我喜欢 :-)CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))RETURNS VARCHAR(1000)ASBEGIN    WHILE PATINDEX('%[^0-9]%', @strText) > 0    BEGIN        SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')    END    RETURN @strTextEND

隔江千里

replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(string,'a',''),'b',''),'c',''),'d',''),'e',''),'f',''),'g',''),'h',''),'i',''),'j',''),'k',''),'l',''),'m',''),'n',''),'o',''),'p',''),'q',''),'r',''),'s',''),'t',''),'u',''),'v',''),'w',''),'x',''),'y',''),'z',''),'A',''),'B',''),'C',''),'D',''),'E',''),'F',''),'G',''),'H',''),'I',''),'J',''),'K',''),'L',''),'M',''),'N',''),'O',''),'P',''),'Q',''),'R',''),'S',''),'T',''),'U',''),'V',''),'W',''),'X',''),'Y',''),'Z','')*1 AS string,:)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server