Быстрая проверка, чтобы видеть, имеет ли кто-либо или знает о функции T-SQL, способной к генерации кратких заголовков от данного входа nvarchar. т.е.;
"Привет Мир"> "привет мировой"
"Это - тест"> "this-is-a-test"
У меня есть функция C#, которую я обычно использую в этих целях, но в этом случае у меня есть большой объем данных, чтобы проанализировать и превратиться в краткие заголовки, таким образом, имеет больше смысла делать это на SQL Server, а не иметь для передачи данных по проводу.
Как в стороне, у меня нет доступа Удаленного рабочего стола к полю, таким образом, я не могу выполнить код (.NET, Powershell и т.д.) против него
Заранее спасибо.
Править: Согласно запросу, вот функция, которую я обычно использую для генерации кратких заголовков:
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;
}
Это то, что я придумал в качестве решения. Не стесняйтесь исправлять / изменять при необходимости.
Я должен упомянуть, что база данных, для которой я сейчас разрабатываю, нечувствительна к регистру, поэтому 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
Ссылка на: http://blog.sqlauthority.com/2007/05/13/sql-server-udf-function-to-parse-alphanumeric-characters-from-string/ для исходный код.
Вы можете использовать LOWER
и REPLACE
для этого:
SELECT REPLACE(LOWER(origString), ' ', '-')
FROM myTable
Для оптового обновления колонки (код устанавливает колонку slug
в соответствии со значением колонки origString
:
UPDATE myTable
SET slug = REPLACE(LOWER(origString), ' ', '-')