快速检查是否有人知道或知道能够从给定的nvarchar输入生成slug的T-SQL函数.即;
"Hello World">"hello-world"
"这是一个测试">"这是一个测试"
我有一个C#函数,我通常用于这些目的,但在这种情况下,我有大量的数据要解析并变成slug,所以在SQL Server上执行它更有意义,而不是必须传输数据电线.
顺便说一句,我没有远程桌面访问框,所以我不能运行代码(.net,Powershell等)对它
提前致谢.
编辑:根据要求,这是我通常用来生成slugs的函数:
public static string GenerateSlug(string n, int maxLength)
{
string s = n.ToLower();
s = Regex.Replace(s, @"[^a-z0-9s-]", "");
s = Regex.Replace(s, @"[s-]+", " ").Trim();
s = s.Substring(0, s.Length <= maxLength ? s.Length : maxLength).Trim();
s = Regex.Replace(s, @"s", "-");
return s;
}
Run Code Online (Sandbox Code Playgroud)
Ode*_*ded 13
SELECT REPLACE(LOWER(origString), ' ', '-')
FROM myTable
Run Code Online (Sandbox Code Playgroud)
对于列的批量更新(代码slug根据列的值设置origString列:
UPDATE myTable
SET slug = REPLACE(LOWER(origString), ' ', '-')
Run Code Online (Sandbox Code Playgroud)
这就是我提出的解决方案.随意修复/修改需要的地方.
我应该提一下,我正在开发的数据库是不区分大小写的,因此是LOWER(@str).
CREATE FUNCTION [dbo].[UDF_GenerateSlug]
(
@str VARCHAR(100)
)
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE @IncorrectCharLoc SMALLINT
SET @str = LOWER(@str)
SET @IncorrectCharLoc = PATINDEX('%[^0-9a-z ]%',@str)
WHILE @IncorrectCharLoc > 0
BEGIN
SET @str = STUFF(@str,@incorrectCharLoc,1,'')
SET @IncorrectCharLoc = PATINDEX('%[^0-9a-z ]%',@str)
END
SET @str = REPLACE(@str,' ','-')
RETURN @str
END
Run Code Online (Sandbox Code Playgroud)
提及:http://blog.sqlauthority.com/2007/05/13/sql-server-udf-function-to-parse-alphanumeric-characters-from-string/获取原始代码.
我知道这是一个旧线程,但对于下一代,我找到了一个甚至可以处理重音的函数:
CREATE function [dbo].[slugify](@string varchar(4000))
RETURNS varchar(4000) AS BEGIN
declare @out varchar(4000)
--convert to ASCII
set @out = lower(@string COLLATE SQL_Latin1_General_CP1251_CS_AS)
declare @pi int
--I'm sorry T-SQL have no regex. Thanks for patindex, MS .. :-)
set @pi = patindex('%[^a-z0-9 -]%',@out)
while @pi>0 begin
set @out = replace(@out, substring(@out,@pi,1), '')
--set @out = left(@out,@pi-1) + substring(@out,@pi+1,8000)
set @pi = patindex('%[^a-z0-9 -]%',@out)
end
set @out = ltrim(rtrim(@out))
-- replace space to hyphen
set @out = replace(@out, ' ', '-')
-- remove double hyphen
while CHARINDEX('--', @out) > 0 set @out = replace(@out, '--', '-')
return (@out)
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6758 次 |
| 最近记录: |