Работа со строкой SQL в хранимой процедуре - PullRequest
2 голосов
/ 19 августа 2010

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

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

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

Спасибо!

(обновлено) Я использую Sql Server 2008

Ответы [ 3 ]

1 голос
/ 19 августа 2010

Я нашел ответ здесь.Спасибо вам всем! Как убрать все не алфавитные символы из строки в SQL Server? </p> <p>CREATE Function [dbo].[create_pretty_url](@Temp VarChar(1000))</p> <p>Returns VarChar(1000)</p> <p>AS Begin</p> <pre><code>While PatIndex('%[^A-za-z0-9]%', @Temp) > 0 Set @Temp = LOWER(Stuff(@Temp, PatIndex('%[^A-za-z0-9]%', @Temp), 1, '')) Return @Temp

Конец

0 голосов
/ 19 августа 2010

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

Если вы использовали Sql Server 2005, 2008, посмотрите на использование функций CLR

Добавление регулярных выражений (регулярных выражений) в SQL Server 2005

0 голосов
/ 19 августа 2010

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