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