3 回答
TA贡献1834条经验 获得超8个赞
我可能会误会,但您有两组数据要从一组中删除数据库中当前数据的字符串,然后在每次导入时都从一组中删除字符串。
对于更新现有记录,我只会使用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)
TA贡献1810条经验 获得超4个赞
我看到了带有T-SQL代码和PATINDEX的解决方案。我喜欢 :-)
CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @strText) > 0
BEGIN
SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
END
RETURN @strText
END
TA贡献1906条经验 获得超10个赞
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,
:)
- 3 回答
- 0 关注
- 555 浏览
添加回答
举报