Sql server 更好的SQL替换

Sql server 更好的SQL替换,sql-server,sql-server-2005,query-optimization,Sql Server,Sql Server 2005,Query Optimization,我想知道是否有更好的方法来编写此更新 update Alumni_Export_New set phone = replace(replace(replace(replace(phone,'-',''),' ',''),')',''),'(','') from tbl 我在MSSQL 2005中有一个存储过程来清理表中的phone字段,我认为应该有一种比我现有的更好的方法 如果使用Microsoft SQl Server,您应该编写一个用户定义函数(UDF)来执行此操作假设这是针对MySQL的

我想知道是否有更好的方法来编写此更新

update Alumni_Export_New
set phone = replace(replace(replace(replace(phone,'-',''),' ',''),')',''),'(','')
from tbl

我在MSSQL 2005中有一个存储过程来清理表中的phone字段,我认为应该有一种比我现有的更好的方法

如果使用Microsoft SQl Server,您应该编写一个用户定义函数(UDF)来执行此操作

假设这是针对MySQL的,我认为对于多个参数(如其他数据库中的TRANSLATE())来说,没有替代REPLACE()函数的方法

如果你真的不喜欢看“代码”>替换< /代码>,如果你不介意一个性能命中,你可以考虑把替换逻辑放在一个用户定义的函数中。否则,你所拥有的可能是你最好的解决方案

示例:

UPDATE Alumni_Export_New
SET phone = dbo.StripPhoneNumber(phone)
FROM tbl

在Oracle上,可以使用translate函数

update Alumni_Export_New set phone = translate(phone, '- ()', '') from tbl 

使用。

如果您只需要i中的数字字符,您是否考虑过通过所有字符串生成循环

    CREATE FUNCTION fn_retun_only_numbers
(
    @myOrgString varchar(50)
)
RETURNS  varchar(50)
AS
BEGIN
    declare @lenOfString int, @i int
    declare @oneChar varchar(1),@newString varchar(50)


    set @lenOfString = (select len(@myOrgString))
    set @i = 1
    set @newString= ''

    while  (@lenOfstring>=@i)
    begin
    set @oneChar = substring(@myOrgString,@i,1)

if ((@oneChar)in ('0','1','2','3','4','5','6','7','8','9'))
begin
set @newString=@newString+@oneChar
end
set @i=@i+1
end
return @newString
END
GO
正如其他人提到的,你现在可以

update Alumni_Export_New
set phone = dbo.fn_retun_only_numbers(phone)
from tbl
我家里没有SQL,所以代码中可能有一些错误

这也许不是最好的解决方案,但如果你需要确保总是只得到数字
也许这是一种可能的方法

您正在使用什么样的SQL?它不能解决替换“问题”,但您是否考虑过使用触发器来清理存储过程?与运行sp时使用的任何计划相比,清理都会立即进行。我还有许多其他查询,这些查询都将同时运行,因此我认为此sp将是最好的。我还把这个表单称为Coldfusion脚本。当从应用程序中调用UDF时,与SP相比,UDF有什么优势?@MisterBigs-我只是想到了替换逻辑本身。您可以保留存储过程,但调用该函数作为
更新的一部分。我已经更新了帖子来描述。除了在这个SP中,替换本身不会被调用,所以我想不需要UDF。在我看来,这看起来很混乱,但我想我会保持原样。这并不能真正改善情况,只是将逻辑转化为一个函数。手动编写UPDATE/etc更容易,但会让更新格式成为一件痛苦的事情,但OP使用的是Microsoft SQL Server。此外,不是直接替换OP的查询,而是替换每个字符,而不是全部字符。虽然有效,但大多数商店不允许使用CLR功能。