[英]Sql string manipulation within stored procedure
我有一個包含文章標題的字段。 我需要從文章標題中創建友好或漂亮的url。
我需要使用SQL處理字符串的幫助。 這必須在存儲過程或函數中完成。
要求:允許的唯一字符是小寫字母和數字(az和0-9)。所有空格都必須用破折號代替。
謝謝!
(更新)我正在使用Sql Server 2008
我在這里找到了答案。 謝謝你們! 如何在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
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
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
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
要檢查小寫字母,可以使用Latin1_General_BIN
類的二進制排序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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.