Лучше заменить SQL - PullRequest
       24

Лучше заменить SQL

3 голосов
/ 30 ноября 2010

Я хотел знать, есть ли лучший способ написания этого обновления.

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

У меня есть хранимая процедура в MSSQL 2005 для очистки поля телефона в таблице, и я подумал, что должно быть лучшеспособ сделать это то, что у меня есть.

Ответы [ 6 ]

2 голосов
/ 30 ноября 2010
1 голос
/ 30 ноября 2010

Вы можете рассмотреть возможность использования логики замены в пользовательской функции, если вам действительно не нравится внешний вид REPLACE и если вы не возражаете против снижения производительности. В противном случае, то, что у вас есть, вероятно, является вашим лучшим решением.

Пример:

UPDATE Alumni_Export_New
SET phone = dbo.StripPhoneNumber(phone)
FROM tbl
0 голосов
/ 30 ноября 2010

Рассматриваете ли вы сделать цикл через все строки, если вам нужны только числовые символы внутри 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

Iу вас дома нет SQL, поэтому, возможно, в коде есть некоторые ошибки

Возможно, это не лучшее решение, но если вам нужно быть уверенным, что вы всегда получаете только цифры, возможно, это один из возможных подходов

0 голосов
/ 30 ноября 2010

В Oracle вы можете использовать функцию перевода.

update Alumni_Export_New set phone = translate(phone, '- ()', '') from tbl 
0 голосов
/ 30 ноября 2010

Предполагая, что это для MySQL, я не думаю, что есть альтернатива функции REPLACE () для нескольких аргументов (например, TRANSLATE () в других БД).

0 голосов
/ 30 ноября 2010

Если вы используете Microsoft SQl Server, вы должны написать пользовательскую функцию (UDF) для этого

...