Расстояние Левенштейна в T-SQL

Привет, я использовал display:flex, чтобы вывести его на 1 строку. ниже ссылка.

https://jsfiddle.net/4rL7jnuc/1/ 888

, если вам нужно больше узнать о flex box, тогда перейдите по ссылке ниже. Спасибо

https://www.w3schools.com/cssref/css3_pr_flex.asp

76
задан Alexander Prokofyev 5 September 2010 в 15:28
поделиться

2 ответа

У Arnold Fribble было два предложения по sqlteam.com/forums

Это быть младшим с 2006:

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

CREATE FUNCTION edit_distance_within(@s nvarchar(4000), @t nvarchar(4000), @d int)
RETURNS int
AS
BEGIN
  DECLARE @sl int, @tl int, @i int, @j int, @sc nchar, @c int, @c1 int,
    @cv0 nvarchar(4000), @cv1 nvarchar(4000), @cmin int
  SELECT @sl = LEN(@s), @tl = LEN(@t), @cv1 = '', @j = 1, @i = 1, @c = 0
  WHILE @j <= @tl
    SELECT @cv1 = @cv1 + NCHAR(@j), @j = @j + 1
  WHILE @i <= @sl
  BEGIN
    SELECT @sc = SUBSTRING(@s, @i, 1), @c1 = @i, @c = @i, @cv0 = '', @j = 1, @cmin = 4000
    WHILE @j <= @tl
    BEGIN
      SET @c = @c + 1
      SET @c1 = @c1 - CASE WHEN @sc = SUBSTRING(@t, @j, 1) THEN 1 ELSE 0 END
      IF @c > @c1 SET @c = @c1
      SET @c1 = UNICODE(SUBSTRING(@cv1, @j, 1)) + 1
      IF @c > @c1 SET @c = @c1
      IF @c < @cmin SET @cmin = @c
      SELECT @cv0 = @cv0 + NCHAR(@c), @j = @j + 1
    END
    IF @cmin > @d BREAK
    SELECT @cv1 = @cv0, @i = @i + 1
  END
  RETURN CASE WHEN @cmin <= @d AND @c <= @d THEN @c ELSE -1 END
END
GO
57
ответ дан surfmuggle 24 November 2019 в 11:14
поделиться

IIRC, с SQL Server 2005 и позже можно записать хранимые процедуры на любом языке.NET: Используя Интеграцию CLR в SQL Server 2005 . С этим не должно быть трудно записать процедуру вычисления расстояние Levenstein .

А, простой Привет, Мир! извлеченный из справки:

using System;
using System.Data;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;

public class HelloWorldProc
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void HelloWorld(out string text)
    {
        SqlContext.Pipe.Send("Hello world!" + Environment.NewLine);
        text = "Hello world!";
    }
}

Затем в Вашем SQL Server выполняет следующее:

CREATE ASSEMBLY helloworld from 'c:\helloworld.dll' WITH PERMISSION_SET = SAFE

CREATE PROCEDURE hello
@i nchar(25) OUTPUT
AS
EXTERNAL NAME helloworld.HelloWorldProc.HelloWorld

И теперь можно протестировать, выполняет его:

DECLARE @J nchar(25)
EXEC hello @J out
PRINT @J

Hope это помогает.

13
ответ дан Leandro López 24 November 2019 в 11:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: