欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

SQL Server對比兩字段的相似度(函數算法)

系統 4473 0
原文: SQL Server對比兩字段的相似度(函數算法)

相似度函數

概述

? ? 比較兩個字段的相似度

?? 最近有人問到關于兩個字段求相似度的函數,所以就寫了一篇關于相似度的函數,分別是“簡單的模糊匹配”,“順序匹配”,“一對一位置匹配”。在平時的這種函數可能會需要用到,可能業務需求不一樣,這里只給出參照,實際情況可以相對修改。

本文所有的兩個字段比較都是除以比較字段本身,例如A與B比較,找出的長度除以A的長度,因為考慮如果A的長度大于B的長度,相似度會超100%,例如‘abbc’,'ab'.

如果大家想除以B的長度,只需要在語句末尾將‘ SET @num=@num*1.0/LEN(@Cloumna) ’修改成‘ SET @num=@num*1.0/LEN(@Cloumnb)

步驟

? ?1.兩個字段簡單相似

?

      
        --
      
      
        -兩個字段簡單相似
      
      
        CREATE
      
      
        FUNCTION
      
      
         DBO.FN_Resemble

    (
      
      
        @Cloumna
      
      
        NVARCHAR
      
      (
      
        MAX
      
      
        ),

     
      
      
        @Cloumnb
      
      
        NVARCHAR
      
      (
      
        MAX
      
      
        )

    )


      
      
        RETURNS
      
      
        FLOAT
      
      
        AS
      
      
        BEGIN
      
      
        DECLARE
      
      
        @num
      
      
        FLOAT
      
      ,
      
        @len
      
      
        int
      
      
        SET
      
      
        @Cloumna
      
      
        =
      
      
        ISNULL
      
      (
      
        @Cloumna
      
      ,
      
        0
      
      
        )

    
      
      
        SET
      
      
        @Cloumnb
      
      
        =
      
      
        ISNULL
      
      (
      
        @Cloumnb
      
      ,
      
        0
      
      
        )

    
      
      
        SET
      
      
        @len
      
      
        =
      
      
        1
      
      
        SET
      
      
        @num
      
      
        =
      
      
        0
      
      
        WHILE
      
      (
      
        LEN
      
      (
      
        @Cloumna
      
      )
      
        <>
      
      
        0
      
      
        AND
      
      
        LEN
      
      (
      
        @CloumnB
      
      )
      
        <>
      
      
        0
      
      
        )

    
      
      
        BEGIN
      
      
        WHILE
      
      (
      
        @len
      
      
        <=
      
      
        LEN
      
      (
      
        @Cloumna
      
      
        ))

        
      
      
        BEGIN
      
      
        DECLARE
      
      
        @a
      
      
        NVARCHAR
      
      (
      
        4
      
      
        )

            
      
      
        SET
      
      
        @a
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @a
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @Cloumna
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

            
      
      
        IF
      
      (
      
        CHARINDEX
      
      (
      
        @a
      
      ,
      
        @CloumnB
      
      )
      
        >
      
      
        0
      
      
        )

            
      
      
        BEGIN
      
      
        SET
      
      
        @num
      
      
        =
      
      
        @num
      
      
        +
      
      
        1
      
      
        END
      
      
        SET
      
      
        @len
      
      
        =
      
      
        @len
      
      
        +
      
      
        1
      
      
        END
      
      
        SET
      
      
        @num
      
      
        =
      
      
        @num
      
      
        *
      
      
        1.0
      
      
        /
      
      
        LEN
      
      (
      
        @Cloumna
      
      
        )

    
      
      
        BREAK
      
      
        END
      
      
        RETURN
      
      
        @num
      
      
        END
      
      
        --
      
      
        --測試代碼
      
      
        SELECT
      
       DBO.FN_Resemble(
      
        '
      
      
        ABDC321G
      
      
        '
      
      ,
      
        '
      
      
        ABDC123G
      
      
        '
      
      )
    

?

2.兩個字段順序相似

      
        --
      
      
        -兩個字段順序相似
      
      
        CREATE
      
      
        FUNCTION
      
      
         DBO.FN_Resemble_order

    (
      
      
        @Cloumna
      
      
        NVARCHAR
      
      (
      
        MAX
      
      
        ),

     
      
      
        @Cloumnb
      
      
        NVARCHAR
      
      (
      
        MAX
      
      
        )

    )


      
      
        RETURNS
      
      
        FLOAT
      
      
        AS
      
      
        BEGIN
      
      
        DECLARE
      
      
        @num
      
      
        FLOAT
      
      ,
      
        @len
      
      
        int
      
      
        SET
      
      
        @Cloumna
      
      
        =
      
      
        ISNULL
      
      (
      
        @Cloumna
      
      ,
      
        0
      
      
        )

    
      
      
        SET
      
      
        @Cloumnb
      
      
        =
      
      
        ISNULL
      
      (
      
        @Cloumnb
      
      ,
      
        0
      
      
        )

    
      
      
        SET
      
      
        @len
      
      
        =
      
      
        1
      
      
        SET
      
      
        @num
      
      
        =
      
      
        0
      
      
        WHILE
      
      (
      
        LEN
      
      (
      
        @Cloumna
      
      )
      
        <>
      
      
        0
      
      
        AND
      
      
        LEN
      
      (
      
        @CloumnB
      
      )
      
        <>
      
      
        0
      
      
        )

    
      
      
        BEGIN
      
      
        DECLARE
      
      
        @a
      
      
        NVARCHAR
      
      (
      
        4
      
      
        )

    
      
      
        DECLARE
      
      
        @b
      
      
        NVARCHAR
      
      (
      
        4
      
      
        )

        
      
      
        IF
      
      (
      
        LEN
      
      (
      
        @Cloumna
      
      )
      
        >=
      
      
        LEN
      
      (
      
        @CloumnB
      
      
        ))

        
      
      
        BEGIN
      
      
        WHILE
      
      (
      
        @len
      
      
        <=
      
      
        LEN
      
      (
      
        @CloumnB
      
      
        ))

            
      
      
        BEGIN
      
      
        SET
      
      
        @a
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @a
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @Cloumna
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

                
      
      
        SET
      
      
        @b
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @b
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @CloumnB
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

                
      
      
        IF
      
      (
      
        @a
      
      
        =
      
      
        @b
      
      
        )

                
      
      
        BEGIN
      
      
        SET
      
      
        @num
      
      
        =
      
      
        @num
      
      
        +
      
      
        1
      
      
        END
      
      
        ELSE
      
      
        BEGIN
      
      
        break
      
      
        END
      
      
        SET
      
      
        @len
      
      
        =
      
      
        @len
      
      
        +
      
      
        1
      
      
        END
      
      
        END
      
      
        ELSE
      
      
        IF
      
          (
      
        LEN
      
      (
      
        @Cloumna
      
      )
      
        <
      
      
        LEN
      
      (
      
        @CloumnB
      
      
        ))

        
      
      
        BEGIN
      
      
        WHILE
      
      (
      
        @len
      
      
        <=
      
      
        LEN
      
      (
      
        @Cloumna
      
      
        ))

                
      
      
        BEGIN
      
      
        SET
      
      
        @a
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @a
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @Cloumna
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

                    
      
      
        SET
      
      
        @b
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @b
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @CloumnB
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

                    
      
      
        IF
      
      (
      
        @a
      
      
        =
      
      
        @b
      
      
        )

                    
      
      
        BEGIN
      
      
        SET
      
      
        @num
      
      
        =
      
      
        @num
      
      
        +
      
      
        1
      
      
        END
      
      
        ELSE
      
      
        BEGIN
      
      
        break
      
      
        END
      
      
        SET
      
      
        @len
      
      
        =
      
      
        @len
      
      
        +
      
      
        1
      
      
        END
      
      
        END
      
      
        SET
      
      
        @num
      
      
        =
      
      
        @num
      
      
        *
      
      
        1.0
      
      
        /
      
      
        LEN
      
      (
      
        @Cloumna
      
      
        )

    
      
      
        BREAK
      
      
        END
      
      
        RETURN
      
      
        @num
      
      
        END
      
      
        go
      
      
        --
      
      
        --測試代碼
      
      
        SELECT
      
       DBO.FN_Resemble_order(
      
        '
      
      
        ABDC456G
      
      
        '
      
      ,
      
        '
      
      
        ABDC123G
      
      
        '
      
      )
    

?

?

3.兩個字段一對一相似

?

      
        --
      
      
        -兩個字段一對一相似
      
      
        CREATE
      
      
        FUNCTION
      
      
         DBO.FN_Resemble_onebyone

    (
      
      
        @Cloumna
      
      
        NVARCHAR
      
      (
      
        MAX
      
      
        ),

     
      
      
        @Cloumnb
      
      
        NVARCHAR
      
      (
      
        MAX
      
      
        )

    )


      
      
        RETURNS
      
      
        FLOAT
      
      
        AS
      
      
        BEGIN
      
      
        DECLARE
      
      
        @num
      
      
        FLOAT
      
      ,
      
        @len
      
      
        int
      
      
        SET
      
      
        @Cloumna
      
      
        =
      
      
        ISNULL
      
      (
      
        @Cloumna
      
      ,
      
        0
      
      
        )

    
      
      
        SET
      
      
        @Cloumnb
      
      
        =
      
      
        ISNULL
      
      (
      
        @Cloumnb
      
      ,
      
        0
      
      
        )

    
      
      
        SET
      
      
        @len
      
      
        =
      
      
        1
      
      
        SET
      
      
        @num
      
      
        =
      
      
        0
      
      
        WHILE
      
      (
      
        LEN
      
      (
      
        @Cloumna
      
      )
      
        <>
      
      
        0
      
      
        AND
      
      
        LEN
      
      (
      
        @CloumnB
      
      )
      
        <>
      
      
        0
      
      
        )

    
      
      
        BEGIN
      
      
        DECLARE
      
      
        @a
      
      
        NVARCHAR
      
      (
      
        4
      
      
        )

    
      
      
        DECLARE
      
      
        @b
      
      
        NVARCHAR
      
      (
      
        4
      
      
        )

        
      
      
        IF
      
      (
      
        LEN
      
      (
      
        @Cloumna
      
      )
      
        >=
      
      
        LEN
      
      (
      
        @CloumnB
      
      
        ))

        
      
      
        BEGIN
      
      
        WHILE
      
      (
      
        @len
      
      
        <=
      
      
        LEN
      
      (
      
        @CloumnB
      
      
        ))

            
      
      
        BEGIN
      
      
        SET
      
      
        @a
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @a
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @Cloumna
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

                
      
      
        SET
      
      
        @b
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @b
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @CloumnB
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

                
      
      
        IF
      
      (
      
        @a
      
      
        =
      
      
        @b
      
      
        )

                
      
      
        BEGIN
      
      
        SET
      
      
        @num
      
      
        =
      
      
        @num
      
      
        +
      
      
        1
      
      
        END
      
      
        SET
      
      
        @len
      
      
        =
      
      
        @len
      
      
        +
      
      
        1
      
      
        END
      
      
        END
      
      
        ELSE
      
      
        IF
      
          (
      
        LEN
      
      (
      
        @Cloumna
      
      )
      
        <
      
      
        LEN
      
      (
      
        @CloumnB
      
      
        ))

        
      
      
        BEGIN
      
      
        WHILE
      
      (
      
        @len
      
      
        <=
      
      
        LEN
      
      (
      
        @Cloumna
      
      
        ))

                
      
      
        BEGIN
      
      
        SET
      
      
        @a
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @a
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @Cloumna
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

                    
      
      
        SET
      
      
        @b
      
      
        =
      
      
        ''
      
      
        SET
      
      
        @b
      
      
        =
      
      
        SUBSTRING
      
      (
      
        @CloumnB
      
      ,
      
        @len
      
      ,
      
        1
      
      
        )

                    
      
      
        IF
      
      (
      
        @a
      
      
        =
      
      
        @b
      
      
        )

                    
      
      
        BEGIN
      
      
        SET
      
      
        @num
      
      
        =
      
      
        @num
      
      
        +
      
      
        1
      
      
        END
      
      
        SET
      
      
        @len
      
      
        =
      
      
        @len
      
      
        +
      
      
        1
      
      
        END
      
      
        END
      
      
        SET
      
      
        @num
      
      
        =
      
      
        @num
      
      
        *
      
      
        1.0
      
      
        /
      
      
        LEN
      
      (
      
        @Cloumna
      
      
        )

    
      
      
        BREAK
      
      
        END
      
      
        RETURN
      
      
        @num
      
      
        END
      
      
        --
      
      
        --測試代碼
      
      
        SELECT
      
       DBO.FN_Resemble_onebyone(
      
        '
      
      
        ABDC456G
      
      
        '
      
      ,
      
        '
      
      
        ABDC123G
      
      
        '
      
      )
    

?

總結

?? 如果大家覺得文章對大家有幫助,麻煩給個推薦,謝謝。

?

備注:

??? 作者: pursuer.chen

??? 博客: http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接,否則保留追究責任的權利。

《歡迎交流討論》

SQL Server對比兩字段的相似度(函數算法)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品视 | 国产精品你懂的在线播放 | 欧美片第一页 | 久久久久中文 | 国产人成精品综合欧美成人 | 成人黄色在线观看 | 中文字幕三区 | 亚洲人成网站看在线播放 | 日本精品免费 | 午夜宅男视频 | av午夜电影 | 成人欧美一区二区 | 精品69久久久久久99 | 欧美精品日韩 | 成人全黄三级视频在线观看 | 青青草最新网址 | 日日爽| 国产精品久久久久久久久久久搜索 | 天天操很很操 | 欧美视频在线观看 | 国产小视频在线播放 | 男女免费爽爽爽在线视频 | 毛片少妇爽到高潮特黄A片 六月色播 | 亚洲成人午夜在线 | 国产精品美女久久久久久免费 | 久热这里只有精品视频6 | 草莓视频午夜在线观影 | 欧美久久xxxxxx影院 | 久久影院一区二区三区 | 日韩免费一区 | 日韩欧美在线视频 | 一区二区在线看 | 国产深夜福利在线观看网站 | 在线观看av网站永久 | 亚洲精品在线播放 | 一区二区三区视频免费 | 国产一区二区久久精品 | 91免费片 | 色综合天天操 | 国产一区二区免费 | 久九九精品免费视频 |