Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Requête pour obtenir des mots communs entre deux chaînes

Le titre de votre question indique MSQL, donc je prends votre question comme une question SQL Server.

  1. Fonction de fractionnement

Selon la version de SQL Server/la configuration du serveur, vous aurez besoin d'une fonction de fractionnement qui peut diviser une chaîne sur un délimiteur de choix. Voici une telle fonction.

CREATE FUNCTION [dbo].[fnSplit](@data NVARCHAR(MAX), @delimiter NVARCHAR(5))
RETURNS @t TABLE (rowNum int IDENTITY(1,1), data NVARCHAR(max), descriptor varchar(255) NULL)
AS
BEGIN

    DECLARE @textXML XML;
    SELECT    @textXML = CAST('<d>' + REPLACE(@data, @delimiter, '</d><d>') + '</d>' AS XML);

    INSERT INTO @t(data)
    SELECT  RTRIM(LTRIM(T.split.value('.', 'nvarchar(max)'))) AS data
    FROM    @textXML.nodes('/d') T(split)

    RETURN
END
  1. Requête de mots courants à l'aide de la fonction split (il existe plusieurs façons de procéder, en voici une). SELECT sentence1.data FROM dbo.fnSplit('This site is very helpful',' ') sentence1 INNER JOIN dbo.fnSplit('I need a helpful site',' ') sentence2 ON sentence1.data = sentence2.data