簡體   English   中英

存儲過程中的SQL字符串操作

[英]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

您沒有說明與此有關的數據庫或版本,但可以進行以下操作:

我要使用Sql Server 2005、2008,看看使用CLR函數

將正則表達式(Regex)添加到SQL Server 2005

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM