如何在Microsoft SQL中的随机位置中使用相似字符进行搜索?

时间:2018-10-23 09:13:53

标签: sql sql-server

我正在寻找一个查询,该查询将允许用户在搜索结果时使用各种字符。角色位置是完全随机的。我们使用特殊字符È,Š,Ć,Č,Ž和Đ,因此所有变体都必须匹配,因为大多数用户不知道如何正确拼写。

示例:

const FastText = require('fasttext.js');

const fastText = new FastText({
    loadModel: './model_cooking.bin'
});

var sample="Our Twitter run by the band and crew to give you an inside look into our lives on the road. Get #FutureHearts now: http://smarturl.it/futurehearts";
fastText.load()
    .then(loaded => {
        console.log(`loaded ${loaded}!`);
        return fastText.predict(sample);
    })
    .then(labels=> {
        console.log("TEXT:", sample, "\nPREDICT:",labels );
        sample="LBi Software provides precisely engineered, customer-focused #HRTECH solutions. Our flagship solution, LBi HR HelpDesk, is a SaaS #HR Case Management product.";
        return fastText.predict(sample);
    })
    .then(labels=> {
        console.log("TEXT:", sample, "\nPREDICT:",labels );
        fastText.unload();
    })
    .catch(error => {
        console.error(`error ${done}!`);
        console.error(error);
    });

2 个答案:

答案 0 :(得分:1)

您可以使用COLLATE

进行搜索
SELECT *
FROM TableNAme
WHERE
   columnName COLLATE Like '%MISIC%' COLLATE Latin1_general_CI_AI
  • latin1使服务器使用字符集拉丁1来处理字符串, 基本上是ascii。

  • CI指定不区分大小写,因此“ ABC”等于“ abc”。

  • AI指定不区分重音,因此“ü”等于“ u”。

有关更多信息的整理,请通过 Collete

推荐人:@JINO SHAJI


根据@Adephx的评论,此功能可以按预期运行,只需进行少量修改

SELECT * FROM [TABLE] WHERE [COLUMN] LIKE '%NAME%' COLLATE Latin1_general_CI_AI

答案 1 :(得分:0)

应用COLLATION是一种很好的做法,特别是如果我们想摆脱 all 重音符号,但是,如果我们需要对各个重音符进行更精细的控制(È,Š,Ć,Č,Ž),我们可以执行以下操作来有选择地比较各个重音符号。

大多数DBMS根据单词的发音(发音)提供字符串比较功能。 SQL Server为此提供了两个内置函数:SOUNDEX()和DIFFERENCE()。在这种情况下,我们可以这样做:

IF (DIFFERENCE('MISIC', 'MISIĆ')>=4) 
    AND (DIFFERENCE('MISIC', 'MISIČ')>=4)
    AND (DIFFERENCE('MISIC', 'MIŠIC')>=4)
    AND (DIFFERENCE('MISIC', 'MIŠIĆ')>=4)
    AND (DIFFERENCE('MISIC', 'MIŠIČ')>=4)
    PRINT 'Same word'
ELSE
    PRINT 'Different word.'

实际上,在许多语言中,'Š'听起来与' S '完全不同,因此SQL Server认为它们的兼容性较差,但是这里提供了一种变通方法等效项:

WITH words AS (SELECT value FROM STRING_SPLIT(N'MISIĆ,MISIČ,MIŠIC,MIŠIĆ,MIŠIČ', ','))
SELECT 
    value,
    CASE WHEN (DIFFERENCE('MISIC', replace(value,'Š','S'))>=4) 
        THEN 'Same word' 
        ELSE 'Not same' 
    END AS 'Comparison'
FROM words

输出

value   comparison
-----   ----------
MISIĆ   Same word
MISIČ   Same word
MIŠIC   Same word
MIŠIĆ   Same word
MIŠIČ   Same word
  

以上示例将在“ Microsoft SQL Server 2016”或更高版本中工作,请注意,STRING_SPLIT()函数仅用于迭代单词/字符串数组,而该函数在SQL Server 2014或更低版本中不可用。 / p>

希望这会有所帮助。