sql >> Database teknologi >  >> RDS >> Mysql

Sammenlign tekstforskelle mellem to næsten identiske rækker/tabeller i MySql

Selvom det ville være nemmere at opnå dette i din applikationskode, er det muligt via et par MySQL-funktioner:

delimiter // drop function if exists string_splitter // create function string_splitter( str text, delim varchar(25), pos tinyint) returns text begin return replace(substring_index(str, delim, pos), concat(substring_index(str, delim, pos - 1), delim), ''); end // drop function if exists percentage_of_matches // create function percentage_of_matches( str1 text, str2 text)returns double begin set str1 = trim(str1); set str2 = trim(str2); while instr(str1, ' ') do set str1 = replace(str1, ' ', ' '); end while; while instr(str2, ' ') do set str2 = replace(str2, ' ', ' '); end while; set @i = 1; set @numWords = 1 + length(str1) - length(replace(str1, ' ', '')); set @numMatches = 0; while @i <= @numWords do set @word = string_splitter(str1, ' ', @i); if str2 = @word or str2 like concat(@word, ' %') or str2 like concat('% ', @word) or str2 like concat('% ', @word, ' %') then set @numMatches = @numMatches + 1; end if; set @i = @i + 1; end while; return (@numMatches / @numWords) * 100; end // delimiter ;

Den første funktion bruges i den anden, som er den du vil kalde i din kode, som sådan:

select percentage_of_matches('salt water masala', 'salt masala water');
select percentage_of_matches('water onion maggi milk', 'water onion maggi');
 



  1. MySQL LOAD DATA INFILE og manglende dobbelte anførselstegn

  2. Sådan opretter du en dato i SQL Server givet dag, måned og år som heltal

  3. Sådan skriver du koden i Oracle SQL (som 'CCYYMMDD' i 102 )

  4. mysql skærer