2010-08-19 3 views
2

У меня есть поле, которое содержит заголовки статей. Мне нужно создать дружественный или красивый URL из заголовков статей.Обработка строк в хранимой процедуре

Мне нужна помощь, манипулирующая строкой с помощью SQL. Это необходимо сделать в рамках хранимой процедуры или функции.

Требования: Разрешены только допустимые буквы и цифры в нижнем регистре (a-z и 0-9) Все пробелы должны быть заменены тире.

Спасибо!

(обновлено) Я с помощью SQL Server 2008

+2

Какая база данных и версия? –

+0

Я не думаю, что это была бы хорошая идея, так как вы могли бы получить разные элементы, имеющие одинаковый URL. И учитывать это в хранимой процедуре значительно усложняло бы логику. Возможно, сделать это за пределами вашей базы данных будет лучше, независимо от того, будете ли вы делать это часто (например, при выборе или вставке) или один раз. – Mhmmd

+0

@OMG Ponies Sql Server 2008 @ShaderOp У меня уже есть функциональность, чтобы позаботиться о дубликатах. Я планировал сделать все манипуляции перед вставкой данных, но, оказывается, большинство данных уже вставлено в базу данных – donxythe

ответ

0

Чтобы проверить для строчных букв, вы можете использовать бинарную сверку как Latin1_General_BIN.

Эта процедура SQL Server проверяет, содержит ли строка только пробелы, цифры или строчные буквы. Если это так, он возвращает 1 и заменяет пробелы символами подчеркивания. Иначе он возвращает -1.

if OBJECT_ID('TestProc') is null 
    exec ('create procedure TestProc as select 1') 
go 
alter procedure TestProc(
    @str varchar(256), 
    @result varchar(256) output) 
as 
begin 
set @result = null 
set @str = REPLACE(@str,' ','_') 
if @str like '%[^0-9a-z_]%' collate Latin1_General_BIN 
    return -1 
set @result = @str 
return 1 
end 
go 

Тестовые данные:

declare @rc int 
declare @result varchar(256) 
exec @rc = TestProc '11 aa', @result out 
select @rc, @result 
exec @rc = TestProc 'NO CAPS', @result out 
select @rc, @result 
exec @rc = TestProc '%#$#$', @result out 
select @rc, @result 

->

1   11_aa 
-1   NULL 
-1   NULL 
0

Вы не указывается, какую базу данных, или версии по этому вопросу, но отпускает с:

I вы должны были использовать Sql Server 2005, 2008, взгляните на использование функций CLR

Adding Regular Expressions (Regex) to SQL Server 2005

1

Я нашел ответ здесь. Спасибо вам всем! How to strip all non-alphabetic characters from string in SQL Server?

CREATE Function [dbo].[create_pretty_url](@Temp VarChar(1000))

Returns VarChar(1000)

AS Begin

While PatIndex('%[^A-za-z0-9]%', @Temp) > 0 
    Set @Temp = LOWER(Stuff(@Temp, PatIndex('%[^A-za-z0-9]%', @Temp), 1, '')) 

Return @Temp 

End

+0

Woops. говорил скоро. Мне нужно сначала заменить пробелы дечками ... любые идеи? – donxythe

+0

Set @Temp = (Stuff (@Temp, PatIndex ('% [^ A-za-z0-9]%', @Temp), 1, '')) Set @Temp = Заменить (LOWER (@Temp) , '', '-') – donxythe