pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

    1. <tfoot id='LF3x5'></tfoot>

      <small id='LF3x5'></small><noframes id='LF3x5'>

        <bdo id='LF3x5'></bdo><ul id='LF3x5'></ul>

      1. <legend id='LF3x5'><style id='LF3x5'><dir id='LF3x5'><q id='LF3x5'></q></dir></style></legend>
        <i id='LF3x5'><tr id='LF3x5'><dt id='LF3x5'><q id='LF3x5'><span id='LF3x5'><b id='LF3x5'><form id='LF3x5'><ins id='LF3x5'></ins><ul id='LF3x5'></ul><sub id='LF3x5'></sub></form><legend id='LF3x5'></legend><bdo id='LF3x5'><pre id='LF3x5'><center id='LF3x5'></center></pre></bdo></b><th id='LF3x5'></th></span></q></dt></tr></i><div class="1lnnbzx" id='LF3x5'><tfoot id='LF3x5'></tfoot><dl id='LF3x5'><fieldset id='LF3x5'></fieldset></dl></div>

        SQL 函數 - 使用 Levenshtein 距離算法進行模糊匹配

        SQL Function - Fuzzy Matching with Levenshtein Distance Algorithm - Return Lowest Value Only(SQL 函數 - 使用 Levenshtein 距離算法進行模糊匹配 - 僅返回最低值)
        <tfoot id='PGBlV'></tfoot>
            <bdo id='PGBlV'></bdo><ul id='PGBlV'></ul>

          • <legend id='PGBlV'><style id='PGBlV'><dir id='PGBlV'><q id='PGBlV'></q></dir></style></legend>

              1. <small id='PGBlV'></small><noframes id='PGBlV'>

                <i id='PGBlV'><tr id='PGBlV'><dt id='PGBlV'><q id='PGBlV'><span id='PGBlV'><b id='PGBlV'><form id='PGBlV'><ins id='PGBlV'></ins><ul id='PGBlV'></ul><sub id='PGBlV'></sub></form><legend id='PGBlV'></legend><bdo id='PGBlV'><pre id='PGBlV'><center id='PGBlV'></center></pre></bdo></b><th id='PGBlV'></th></span></q></dt></tr></i><div class="f3vvh1p" id='PGBlV'><tfoot id='PGBlV'></tfoot><dl id='PGBlV'><fieldset id='PGBlV'></fieldset></dl></div>
                  <tbody id='PGBlV'></tbody>

                  本文介紹了SQL 函數 - 使用 Levenshtein 距離算法進行模糊匹配 - 僅返回最低值的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  限時送ChatGPT賬號..

                  問題:需要 SQL 函數使用 Levenshtein 算法返回最低"匹配值.

                  代碼:

                  <預><代碼>創建函數 ufn_levenshtein(@s1 nvarchar(3999), @s2 nvarchar(3999))返回整數作為開始聲明 @s1_len int, @s2_len int聲明 @i int、@j int、@s1_char nchar、@c int、@c_temp int聲明@cv0 varbinary(8000), @cv1 varbinary(8000)選擇@s1_len = LEN(@s1),@s2_len = LEN(@s2),@cv1 = 0x0000,@j = 1,@i = 1,@c = 0而@j <= @s2_lenSELECT @cv1 = @cv1 + CAST(@j AS binary(2)),@j = @j + 1當@i <= @s1_len開始選擇@s1_char = SUBSTRING(@s1, @i, 1),@c = @i,@cv0 = CAST(@i AS binary(2)),@j = 1當@j <= @s2_len開始設置@c = @c + 1SET @c_temp = CAST(SUBSTRING(@cv1, @j+@j-1, 2) AS int) +當@s1_char = SUBSTRING(@s2, @j, 1) THEN 0 ELSE 1 END如果@c >@c_temp SET @c = @c_tempSET @c_temp = CAST(SUBSTRING(@cv1, @j+@j+1, 2) AS int)+1如果@c >@c_temp SET @c = @c_tempSELECT @cv0 = @cv0 + CAST(@c AS binary(2)),@j = @j + 1結尾選擇@cv1 = @cv0,@i = @i + 1結尾返回@c結尾如果 OBJECT_ID('tempdb..#ExistingCustomers') 不是 NULL刪除表#ExistingCustomers;創建表#ExistingCustomers(客戶 VARCHAR(255),身份證號碼)INSERT #ExistingCustomers SELECT 'Ed''s Barbershop', 1002INSERT #ExistingCustomers SELECT 'GroceryTown', 1003INSERT #ExistingCustomers SELECT 'Candy Place', 1004INSERT #ExistingCustomers SELECT 'Handy Man', 1005如果 OBJECT_ID('tempdb..#POTENTIALCUSTOMERS') 不是 NULL下降表#潛在客戶;創建表#POTENTIALCUSTOMERS(客戶VARCHAR(255));插入 #POTENTIALCUSTOMERS SELECT 'Eds Barbershop'INSERT #POTENTIALCUSTOMERS SELECT '雜貨城'插入 #POTENTIALCUSTOMERS 選擇糖果店"INSERT #POTENTIALCUSTOMERS SELECT 'Handee Man'插入 #POTENTIALCUSTOMERS 選擇蘋果農場"插入 #POTENTIALCUSTOMERS SELECT 'Ride-a-Long Bikes'選擇 A. 客戶,出價,b.客戶作為客戶,dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) 作為 ValueLev來自#POTENTIALCUSTOMERS aLEFT JOIN #ExistingCustomers b ON dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) <15;

                  返回:

                  我想退貨:

                  說明:結果是 Levenshtein 算法的最低"值.有兩行 Levenshtein 分數相同 The Apple FarmRide-a-Long Bikes,在這種情況下,任何值都可以,只要它是一種價值.

                  參考資料:

                  SQL 模糊連接 - MSSQL

                  http://www.kodyaz.com/articles/fuzzy-string-matching-using-levenshtein-distance-sql-server.aspx

                  解決方案

                  如果您按潛在客戶進行分區并使用 ValueLev 對結果進行排序,則可以使用 CTE 來獲得您想要的結果:

                  ;with CTE AS(SELECT RANK() OVER (PARTITION BY a.Customer ORDER BY dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) ASC) AS RowNbr,一個客戶,出價,b.客戶作為客戶,dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) 作為 ValueLev來自#POTENTIALCUSTOMERS aLEFT JOIN #ExistingCustomers b ON dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) <15)選擇客戶,MIN(ID) 作為 ID,MIN(cust) AS cust,價值等級從 CTE哪里 CTE.RowNbr = 1按客戶分組,ValueLev

                  由于您不介意在重復 ValueLev 的情況下返回哪個結果,請使用 GROUP BYMIN 來縮放結果每個潛在客戶最多一個.

                  輸出:

                  Customer ID cust ValueLev糖果店 1004 糖果店 0雜貨鎮 1003 雜貨鎮 0Eds 理發店 1002 Ed 的理發店 1勤雜工 1005 勤雜工 2蘋果農場 1004 Candy Place 9Ride-a-Long Bikes 1003 Candy Place 14

                  Problem: Need SQL function to return the 'lowest' matching value using the Levenshtein algorithm.

                  Code:

                  
                  CREATE FUNCTION ufn_levenshtein(@s1 nvarchar(3999), @s2 nvarchar(3999))
                  RETURNS int
                  AS
                  BEGIN
                   DECLARE @s1_len int, @s2_len int
                   DECLARE @i int, @j int, @s1_char nchar, @c int, @c_temp int
                   DECLARE @cv0 varbinary(8000), @cv1 varbinary(8000)
                  
                   SELECT
                    @s1_len = LEN(@s1),
                    @s2_len = LEN(@s2),
                    @cv1 = 0x0000,
                    @j = 1, @i = 1, @c = 0
                  
                   WHILE @j <= @s2_len
                    SELECT @cv1 = @cv1 + CAST(@j AS binary(2)), @j = @j + 1
                  
                   WHILE @i <= @s1_len
                   BEGIN
                    SELECT
                     @s1_char = SUBSTRING(@s1, @i, 1),
                     @c = @i,
                     @cv0 = CAST(@i AS binary(2)),
                     @j = 1
                  
                    WHILE @j <= @s2_len
                    BEGIN
                     SET @c = @c + 1
                     SET @c_temp = CAST(SUBSTRING(@cv1, @j+@j-1, 2) AS int) +
                      CASE WHEN @s1_char = SUBSTRING(@s2, @j, 1) THEN 0 ELSE 1 END
                     IF @c > @c_temp SET @c = @c_temp
                     SET @c_temp = CAST(SUBSTRING(@cv1, @j+@j+1, 2) AS int)+1
                     IF @c > @c_temp SET @c = @c_temp
                     SELECT @cv0 = @cv0 + CAST(@c AS binary(2)), @j = @j + 1
                   END
                  
                   SELECT @cv1 = @cv0, @i = @i + 1
                   END
                  
                   RETURN @c
                  END
                  
                  
                  
                  
                  IF OBJECT_ID('tempdb..#ExistingCustomers') IS NOT NULL
                      DROP TABLE #ExistingCustomers;
                  
                      CREATE TABLE #ExistingCustomers
                  (
                      Customer VARCHAR(255),
                      ID INT
                  )
                  
                  INSERT #ExistingCustomers SELECT 'Ed''s Barbershop',  1002
                  INSERT #ExistingCustomers SELECT 'GroceryTown',  1003
                  INSERT #ExistingCustomers SELECT 'Candy Place',  1004
                  INSERT #ExistingCustomers SELECT 'Handy Man',  1005
                  
                  
                  
                  IF OBJECT_ID('tempdb..#POTENTIALCUSTOMERS') IS NOT NULL
                      DROP TABLE #POTENTIALCUSTOMERS;
                  
                  CREATE TABLE #POTENTIALCUSTOMERS(Customer VARCHAR(255));
                  
                  INSERT #POTENTIALCUSTOMERS SELECT 'Eds Barbershop'
                  INSERT #POTENTIALCUSTOMERS SELECT 'Grocery Town'
                  INSERT #POTENTIALCUSTOMERS SELECT 'Candy Place'
                  INSERT #POTENTIALCUSTOMERS SELECT 'Handee Man'
                  INSERT #POTENTIALCUSTOMERS SELECT 'The Apple Farm'
                  INSERT #POTENTIALCUSTOMERS SELECT 'Ride-a-Long Bikes'
                  
                  
                  SELECT A.Customer,
                         b.ID,
                         b.Customer as cust,
                         dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) as ValueLev
                  FROM #POTENTIALCUSTOMERS a
                       LEFT JOIN #ExistingCustomers b ON dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) < 15;
                  
                  

                  This returns:

                  What I would like to return:

                  Explanation: The results are the 'lowest' values from the Levenshtein algorithm. There are two rows where the Levenshtein scores are the same The Apple Farm and Ride-a-Long Bikes, in which case any of the values is fine, just as long as it is one value.

                  References:

                  SQL Fuzzy Join - MSSQL

                  http://www.kodyaz.com/articles/fuzzy-string-matching-using-levenshtein-distance-sql-server.aspx

                  解決方案

                  You can use CTE to get the result you want if you partition by the potential customer and use the ValueLev to order the results:

                  ;WITH CTE AS
                  (
                      SELECT  RANK() OVER (PARTITION BY a.Customer ORDER BY dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) ASC) AS RowNbr,
                              A.Customer,
                              b.ID,
                              b.Customer as cust,
                              dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) as ValueLev
                        FROM  #POTENTIALCUSTOMERS a
                          LEFT JOIN #ExistingCustomers b ON dbo.ufn_levenshtein(REPLACE(A.Customer, ' ', ''), REPLACE(B.Customer, ' ', '')) < 15
                  )
                  SELECT  Customer,
                          MIN(ID) AS ID,
                          MIN(cust) AS cust,
                          ValueLev
                    FROM  CTE
                    WHERE CTE.RowNbr = 1
                    GROUP BY Customer, ValueLev
                  

                  As you don't mind which result is returned in the case of duplicate ValueLev, use GROUP BY and MIN to scale the results down to one per potential customer.

                  Output:

                  Customer            ID      cust            ValueLev
                  Candy Place         1004    Candy Place     0
                  Grocery Town        1003    GroceryTown     0
                  Eds Barbershop      1002    Ed's Barbershop 1
                  Handee Man          1005    Handy Man       2
                  The Apple Farm      1004    Candy Place     9
                  Ride-a-Long Bikes   1003    Candy Place     14
                  

                  這篇關于SQL 函數 - 使用 Levenshtein 距離算法進行模糊匹配 - 僅返回最低值的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  SQL query to get all products, categories and meta data woocommerce/wordpress(獲取所有產品、類別和元數據的 SQL 查詢 woocommerce/wordpress)
                  Can I figure out a list of databases and the space used by SQL Server instances without writing SQL queries?(我可以在不編寫 SQL 查詢的情況下找出數據庫列表和 SQL Server 實例使用的空間嗎?) - IT屋-程序員軟件開發
                  How to create a login to a SQL Server instance?(如何創建對 SQL Server 實例的登錄?)
                  How to know the version and edition of SQL Server through registry search(如何通過注冊表搜索知道SQL Server的版本和版本)
                  Why do I get a quot;data type conversion errorquot; with ExecuteNonQuery()?(為什么會出現“數據類型轉換錯誤?使用 ExecuteNonQuery()?)
                  How to show an image from a DataGridView to a PictureBox?(如何將 DataGridView 中的圖像顯示到 PictureBox?)
                    <tbody id='J74jT'></tbody>

                  <tfoot id='J74jT'></tfoot>

                      • <small id='J74jT'></small><noframes id='J74jT'>

                          <legend id='J74jT'><style id='J74jT'><dir id='J74jT'><q id='J74jT'></q></dir></style></legend>
                          <i id='J74jT'><tr id='J74jT'><dt id='J74jT'><q id='J74jT'><span id='J74jT'><b id='J74jT'><form id='J74jT'><ins id='J74jT'></ins><ul id='J74jT'></ul><sub id='J74jT'></sub></form><legend id='J74jT'></legend><bdo id='J74jT'><pre id='J74jT'><center id='J74jT'></center></pre></bdo></b><th id='J74jT'></th></span></q></dt></tr></i><div class="zbzj3lh" id='J74jT'><tfoot id='J74jT'></tfoot><dl id='J74jT'><fieldset id='J74jT'></fieldset></dl></div>
                          • <bdo id='J74jT'></bdo><ul id='J74jT'></ul>
                            主站蜘蛛池模板: 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 异噻唑啉酮-均三嗪-三丹油-1227-中北杀菌剂厂家 | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 尚为传动-专业高精密蜗轮蜗杆,双导程蜗轮蜗杆,蜗轮蜗杆减速机,蜗杆减速机生产厂家 | 精雕机-火花机-精雕机 cnc-高速精雕机-电火花机-广东鼎拓机械科技有限公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 河南膏药贴牌-膏药代加工-膏药oem厂家-洛阳今世康医药科技有限公司 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 行业分析:提及郑州火车站附近真有 特殊按摩 ?2025实地踩坑指南 新手如何避坑不踩雷 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 水厂自动化|污水处理中控系统|水利信息化|智慧水务|智慧农业-山东德艾自动化科技有限公司 | 济南网站建设_济南网站制作_济南网站设计_济南网站建设公司_富库网络旗下模易宝_模板建站 | 真空泵厂家_真空泵机组_水环泵_旋片泵_罗茨泵_耐腐蚀防爆_中德制泵 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 硬齿面减速机_厂家-山东安吉富传动设备股份有限公司 | 好笔杆子网 - 公文写作学习交流分享平台| 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 步进_伺服_行星减速机,微型直流电机,大功率直流电机-淄博冠意传动机械 | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | 硬齿面减速机[型号全],ZQ减速机-淄博久增机械 | 合肥办公室装修 - 合肥工装公司 - 天思装饰 | 福建成考网-福建成人高考网 | 特种电缆厂家-硅橡胶耐高温电缆-耐低温补偿导线-安徽万邦特种电缆有限公司 | 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 深圳货架厂家_金丽声精品货架_广东金丽声展示设备有限公司官网 | 铁艺,仿竹,竹节,护栏,围栏,篱笆,栅栏,栏杆,护栏网,网围栏,厂家 - 河北稳重金属丝网制品有限公司 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | 磁力反应釜,高压釜,实验室反应釜,高温高压反应釜-威海自控反应釜有限公司 | 地源热泵一体机,地源热泵厂家-淄博汇能环保设备有限公司 | 万濠投影仪_瑞士TRIMOS高度仪_尼康投影仪V12BDC|量子仪器 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | 首页-瓜尔胶系列-化工单体系列-油田压裂助剂-瓜尔胶厂家-山东广浦生物科技有限公司 | 辐射仪|辐射检测仪|辐射巡测仪|个人剂量报警仪|表面污染检测仪|辐射报警仪|辐射防护网 | 球盟会·(中国)官方网站|