繁体   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