sql server - c#字符串函数到T-SQL标量函数
本文关键字:函数 标量 T-SQL 字符串 server sql | 更新日期: 2023-09-27 18:01:52
我想使用一个c#函数来修改html有效url名称的字符串。函数如下:
public static string HTMLValidName(string input)
{
string[] pattern = new string[] { "[^a-zA-Z0-9-]", "-+" };
string[] replacements = new string[] { "-", "-" };
input = input.Trim();
input = input.Replace("Ç", "C");
input = input.Replace("ç", "c");
input = input.Replace("Ğ", "G");
input = input.Replace("ğ", "g");
input = input.Replace("Ü", "U");
input = input.Replace("ü", "u");
input = input.Replace("Ş", "S");
input = input.Replace("ş", "s");
input = input.Replace("İ", "I");
input = input.Replace("ı", "i");
input = input.Replace("Ö", "O");
input = input.Replace("ö", "o");
for (int i = 0; i <= pattern.Length - 1; i++)
input = Regex.Replace(input, pattern[i], replacements[i]);
while(input.Contains("--"))
{
input = input.Replace("--", "-");
}
if (input[0] == '-') input = input.Substring(1, input.Length - 1);
return input;
}
我需要对SQL结果使用这个函数。如SELECT ID FROM Categories WHERE HTMLValidName(Title)=@URLTitle
我如何将其转换为T-SQL函数或者我可以在c#中创建此函数?
CREATE FUNCTION dbo.HtmlValidName(@input nvarchar(max))
RETURNS nvarchar(max)
AS
BEGIN
DECLARE @i int
DECLARE @match int
-- Remove diacritical marks
SET @input = CAST(@input AS varchar(max)) COLLATE Japanese_BIN
-- Replace non-alphanumerics with dash
SET @i = 0
WHILE @i < 1000000
BEGIN
SET @match = PATINDEX('%[^a-zA-Z0-9-]%', @input)
IF @match = 0 BREAK
SET @input = STUFF(@input, @match, 1, '-')
SET @i = @i + 1
END
RETURN @input
END
您可以创建一个托管的用户定义函数,它运行在SQL服务器中,从外部看起来像一个普通的用户定义函数。