mysql字段的相似度_SQL字段的相似度

本文介绍了两个SQL自定义函数,用于衡量字符串字段的顺序相似度和简单相似度。FN_Resemble_order考虑字符的相对位置,而FN_Resemble则检查字符是否出现在对方字符串中。这两个函数可用于数据清洗、文本比较等场景,提高字符串匹配的精度。

---两个字段顺序相似

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)

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')

---两个字段简单相似

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')

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值